1

C# で CSV ファイルを解析しようとしています。コンマ (,) で分割します。私はこれで動作するようになりました:

[\t,](?=(?:[^\"]|\"[^\"]*\")*$)

この文字列を分割する:

2012-01-06,"Some text with, comma",,"300,00","143,52"

私に与えます:

2012-01-06
"Some text with, comma"

"300,00"
"143,52"

しかし、出力から "" を失う方法がわからないので、代わりにこれを取得します。

2012-01-06
Some text with, comma

300,00
143,52

助言がありますか?

4

3 に答える 3

2

なぜこれに正規表現を使用しているのですか?ファイルが整形式であることを確認しますか?

使用できますString.Replace()

String s = "Some text with, comma";
s = s.Replace("\"", "");

// After matched
String line = 2012-01-06,"Some text with, comma",,"300,00","143,52";
String []fields = line.Split(',');
for (int i = 0; i < fields.Length; i++)
{
   // Call a function to remove quotes
   fields[i] = removeQuotes(fields[i]);
}

String removeQuotes(String s)
{
   return s.Replace("\"", "");
}
于 2012-07-06T14:52:42.880 に答える
2

だから、このようなもの。繰り返しますが、この目的には RegEx を使用しませんが、YMMV.

var sp = Regex.Split(a, "[\t,](?=(?:[^\"]|\"[^\"]*\")*$)")
     .Select(s => Regex.Replace(s.Replace("\"\"","\""),"^\"|\"$","")).ToArray();

したがって、ここでの考え方は、まず最初に、二重引用符を単一の二重引用符に置き換えたいということです。そして、その文字列は、文字列の最初と最後にある二重引用符を単純に削除する 2 番目の正規表現に渡されます。

最初の置換の理由は、次のような文字列のためです。

var a = "1999,Chevy,\"Venture \"\"Extended Edition, Very Large\"\" Dude\",\"\",\"5000.00\"";

したがって、これは ""Extended Edition"" のような文字列になり、二重引用符を単一引用符に変更する必要があります。

于 2012-07-06T16:14:07.910 に答える
2

CSV を解析して .NET を使用する場合は、正規表現を使用しないでください。この目的のために作成されたコンポーネントを使用します。.Net での CSV ファイルのインポートに関する質問を参照してください。

CSV 仕様が十分に単純に見えることはわかっていますが、信じてください。この道を進み続けると、心痛と破滅に直面することになります。

于 2012-07-06T14:55:03.050 に答える