2

二重引用符で囲まれたものを除いて、コンマに基づいて文字列を分割したい。また、隣接するコンマがある場合は、それらを個別のトークンとしてカウントする必要がある

正規表現を使用して二重引用符で囲まれているものを除いて、コンマで文字列分割を行うことができます[^,\"']+|\"([^\"]*)\"

ただし、隣接するコンマがある場合、適切にトークン化できません。文字列の例

one,two,three,four,"five1,five2", six ,seven,"eight1,eight2","nine",,eleven

出力は

one
two
three
four
five1,five2
six
seven
eight1,eight2
nine

eleven

助けてください

4

1 に答える 1

6

すべての引用符が一致する場合、分割するすべてのコンマの後に偶数の。が続き"ます。myString.split(pattern, -1)したがって、先読みを使用して、このことを次のように詰め込むことができます。

,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)

"これは、問題のコンマと文字列の終わりの間に偶数がある場合にのみ一致します。

-1の引数が重要であることに注意してくださいsplit。そうでない場合、末尾の空の文字列は省略されます。

補足:Java正規表現エンジンがどれだけ最適化されているかはわかりません。したがって、この先読みが失敗した場合、不必要にバックトラックするため、この先読みは非常に非効率になる可能性があります。パフォーマンスの問題が発生した場合は、数量詞を所有格にしてみてください。

,(?=(?:(?:[^\"]*+\"){2})*+[^\"]*+$)

これにより、エンジンのバックトラックが停止します。

于 2012-11-07T10:38:13.910 に答える