我正在尝试用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
有什么建议吗?
答案 0 :(得分:2)
如果您尝试解析CSV并使用.NET,请不要使用正则表达式。使用为此目的创建的组件。请参阅问题CSV File Imports in .Net。
我知道CSV规范看起来很简单,但请相信我,如果你继续沿着这条路走下去,你会感到心痛和破坏。
答案 1 :(得分:1)
为什么要使用正则表达式?确保文件格式正确吗?
您可以使用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("\"", "");
}
答案 2 :(得分:1)
所以,这样的事情。同样,我不会为此目的使用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\"";
所以,这会给你一个这样的字符串:“”扩展版“”,双引号需要改为单引号。