2012-11-27 9 views
7

データソースはコンマで区切られ、引用符で修飾されています。 CSV。しかし、データソースプロバイダは、時には厄介なことをします。私はそれらのうちの1つを除いてすべてを補償しました(ファイルを1行ずつ読み込み、それをクレンジングの後に書き出します)。私の正規表現がかなり弱いときに最後の問題を解決しようとしています。そこでここでは別の引用符で囲まれた文字列引用符で囲まれた別の文字列に埋め込まれた引用符付きの文字列と一致する正規表現

の内部引用符で囲まれた文字列のマッチング

は、私たちの例の文字列です...

"foobar", 356, "Lieu-dit "chez Métral", Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18" 

私はで、サブ「シェMETRAL」を一致させるために探していますサブストリングと置き換えるためにchezメダル。理想的には、可能な限り数行のコードで。最終的な目標は、すでに行なわれた置換を元に戻して(またはメソッドの戻り値として返す)行を書き込むことです。

だから、私たちの例の文字列のように終わるでしょう...

"foobar", 356, "Lieu-dit chez Métral, Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18" 

私は引用符で囲まれた文字列に一致するような(?<quotedstring>\"\w+[^,]+\")などのパターンを定義することができます知っているが、私の正規表現-FUは、データベース開発者(弱いほとんどないですC#を使用する)ので、名前付きグループ内の別の引用符付き文字列と一致させる方法がわかりませんquotedstring


FYI:カンマでフォーマットされたが、引用修飾されていない大きな整数に気付いたものについては、そのはすでに処理されます。行デリミタ(時にはCR、場合によってはLF)をランダムに使用します。他の問題として...

+1

あなたはCSVファイル(これは有効なCSVではありません)で非常に不正な形式の試みがあるようです。 Regexはこのための良い解決策ではありません。 – Oded

+1

A - > "A" | aはCF文法であり、正規表現と正しく照合することはできません。 – fardjad

+0

埋め込みカンマと「その他の問題」は、どのように「処理済み」ですか?これと同じ方法を使って余分な引用符を扱うことはできますか? –

答えて

4

は今$1

と交換してください。このregex

(?<!,\s*|^)"([^",]*)" 

と交換し、それは

なる """をエスケープ here


それを試してみてください

(?<!,\s*|^)""([^"",]*)"" 
+0

"chezMétral"に加えて、上記のパターン "、356"、 "、1,345,456,235,231"も一致しているようです。 –

+0

@TheLazyDBAそれは私がそれをテストしたことをそのように現れていません。仕事をしてください – Anirudha

+0

あなたの答えをさらに飾ることは可能でしょうか? –

関連する問題