この正規表現を試すことができます:
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
,
これにより、偶数個の二重引用符が続く文字列が分割されます。つまり、二重引用符の外側のコンマで分割されます。これは、文字列にバランスの取れた引用符がある場合に機能します。
説明:
, // Split on comma
(?= // Followed by
(?: // Start a non-capture group
[^"]* // 0 or more non-quote characters
" // 1 quote
[^"]* // 0 or more non-quote characters
" // 1 quote
)* // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
[^"]* // Finally 0 or more non-quotes
$ // Till the end (This is necessary, else every comma will satisfy the condition)
)
(?x)
正規表現で修飾子を使用して、コードにこのように入力することもできます。修飾子は正規表現の空白を無視するため、次のように複数の行に分割された正規表現を読みやすくなります。
String[] arr = str.split("(?x) " +
", " + // Split on comma
"(?= " + // Followed by
" (?: " + // Start a non-capture group
" [^\"]* " + // 0 or more non-quote characters
" \" " + // 1 quote
" [^\"]* " + // 0 or more non-quote characters
" \" " + // 1 quote
" )* " + // 0 or more repetition of non-capture group (multiple of 2 quotes will be even)
" [^\"]* " + // Finally 0 or more non-quotes
" $ " + // Till the end (This is necessary, else every comma will satisfy the condition)
") " // End look-ahead
);