3 回答
TA贡献1829条经验 获得超7个赞
尝试使用此正则表达式:
"[^"\r\n]*"|'[^'\r\n]*'|[^,\r\n]*
Regex regexObj = new Regex(@"""[^""\r\n]*""|'[^'\r\n]*'|[^,\r\n]*");
Match matchResults = regexObj.Match(input);
while (matchResults.Success)
{
Console.WriteLine(matchResults.Value);
matchResults = matchResults.NextMatch();
}
:
猫
狗
“ 0 = OFF,1 = ON”
狮子
虎
'R =红色,G =绿色,B =蓝色'
熊
注意:此正则表达式解决方案适用于您的情况,但是我建议您使用专用的库,例如FileHelpers。
TA贡献1830条经验 获得超9个赞
为什么不听从专家的建议,不要滚动自己的CSV解析器。
您的第一个想法是,“我需要在引号内处理逗号”。
您的下一个想法是,“哦,糟糕,我需要处理引号内的引号。转义的引号。双引号。单引号...”
这是通往疯狂的道路。不要自己写。查找具有广泛的单元测试覆盖面的库,该库涉及所有困难部分,并为您解决了所有困难。对于.NET,请使用免费的开源FileHelpers库。
TA贡献1806条经验 获得超8个赞
只需添加我今天上午工作的解决方案。
var regex = new Regex("(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
foreach (Match m in regex.Matches("<-- input line -->"))
{
var s = m.Value;
}
如您所见,您需要每行调用regex.Matches()。然后,它将返回MatchCollection,其中具有与列相同数量的项目。显然,每个匹配项的Value属性都是解析后的值。
这项工作仍在进行中,但它很乐意解析CSV字符串,例如:
2,3.03,"Hello, my name is ""Joshua""",A,B,C,,,D
- 3 回答
- 0 关注
- 970 浏览
添加回答
举报