6

この分割行を見つけた特定の Scala コードに問題があります。以前は、次のような分割行のみを使用していました。

var newLine = line.split(",")

しかし、この分割は何を意味するのでしょうか?

var newLine2 = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")

分割する必要がある行は次のようになります。

1966, "Green, Green Grass of Home", Tom Jones, 850000

前もって感謝します!

4

2 に答える 2

11

split メソッド内の文字列は、正規表現を定義します。グループ(?=([^\"]*\"[^\"]*\")*[^\"]*$)肯定先読みアサーションです。これはコンマで分割することを意味しますが、パターンがコンマに続く場合のみです([^\"]*\"[^\"]*\")*[^\"]*$

([^\"]*     # a series of non double quote characters
    \"      # a double quote
    [^\"]*  # a series of non double quote characters
\")         # a double quote
*           # repeat that whole group 0 or more times
[^\"]*$     # a series of non double quote characters till the end of the string

つまり、コンマの後に同じ量の二重引用符がある場合にのみ、コンマで分割されます。つまり、コンマが二重引用符内にない場合にのみ分割されます。(これは、文字列に引用符のペアしかない限り機能します。)

于 2013-06-03T07:34:40.823 に答える