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

如果您尝试解析 CSV 并使用 .NET,请不要使用正则表达式。使用为此目的创建的组件。请参阅.Net 中的 CSV 文件导入问题。

我知道 CSV 规范看起来很简单,但相信我,如果你继续走这条路,你会感到心痛和毁灭。

于 2012-07-06T14:55:03.050 回答
2

所以,像这样的东西。同样,我不会为此目的使用 RegEx,而是使用 YMMV。

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

所以,这里的想法是,首先,你想用一个双引号替换双双引号。然后将该字符串馈送到第二个正则表达式,它只是删除字符串开头和结尾的双引号。

第一次替换的原因是因为这样的字符串:

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

所以,这会给你一个像这样的字符串:""Extended Edition"",并且需要将双引号更改为单引号。

于 2012-07-06T16:14:07.910 回答