2

引用符の間の値を見つけるための正規表現があります。

([\"'])(?:\\\1|.)*?\1

これは正常に機能しますが、引用符の間に二重引用符がある場合は失敗し、それらも分割されます。例えば。

"value1","value2","value with "" is here","value4"

次のような出力が必要です

value1
value2
value with "" is here
value4

つまり、二重引用符がどこかにある場合、出力でそれを返す必要があります。誰でもこれを手伝ってもらえますか?

4

2 に答える 2

1

入力は CSV レコードのように見えます。このレコードでは、別の引用符を追加することでリテラルの引用符がエスケープされます。バックスラッシュで引用符をエスケープすることもできると言っていますか? 私はそれを見たことがありません。通常はどちらかです。また、同じレコード内で一重引用符 (アポストロフィ) と二重引用符を交互に使用できる CSV バリアントは見たことがありません。これを必要以上に複雑にしている可能性があります。

二重引用符のみがフィールド区切り文字として認識され、別の引用符を追加することによってのみエスケープできると仮定すると、フィールドの一致は可能な限り簡単です。

(?:"[^"]*")+

バックスラッシュ エスケープ バージョンはもう少し複雑です。

"[^"\\]*(?:\\.[^"\\]*)*"

単一引用符区切り文字も許可されている場合、最も簡単な方法は別の代替手段を追加することです。

(?:"[^"]*")+|(?:'[^']*')+

"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'

そして、両方の種類の引用と両方の種類のエスケープを本当にサポートする必要がある場合は、Tim's answer を参照してください。しかし、私は非常に懐疑的です。

于 2013-10-25T09:11:57.540 に答える