2013-06-03 4 views
6

私はこの分割線を見つけた特定のScalaコードに問題があります。前に次のような分割線を使用する前に:Scalaのこの分割線は何を意味していますか?

var newLine = line.split(",") 

この分割はどういう意味ですか?

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

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

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

ありがとう!

+1

宣言構文 'val name = expression'を除いて、これはScalaのものではありません。 'split'メソッドは' java.lang.String'で定義されています:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) –

答えて

11

ためhttp://en.wikipedia.org/wiki/Regular_expressionを参照。グループ(?=([^\"]*\"[^\"]*\")*[^\"]*$)positive lookahead assertionです。これはコンマで分割することを意味しますが、パターン([^\"]*\"[^\"]*\")*[^\"]*$がカンマの後にある場合のみです。コンマが二重引用符の内側ではありませんスプリット場合にのみ、つまりので、コンマ以下の二重引用符の等しい量がある場合、それが唯一のカンマで分割することを意味し

([^\"]*  # 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 

。 (これは文字列に引用符だけがある限り動作します)

+0

あなたの迅速かつ有益な答えに感謝します! :)今それは理にかなっています。 – amko23

2

これは、正規表現(「正規表現」)であり、説明の分割方法の中の文字列が定義regular expression

+0

ありがとうございました:) – amko23

関連する問題