C# 正则表达式拆分引号和逗号语法错误 [重复]
Posted
技术标签:
【中文标题】C# 正则表达式拆分引号和逗号语法错误 [重复]【英文标题】:C# Regex Split Quotes and Comma Syntax Error [duplicate] 【发布时间】:2019-03-13 15:06:30 【问题描述】:我有一个文本文件如下:
"0","Column","column2","Column3"
我已设法将数据分解为以下内容:
"0"
"Column"
"Column2"
"Column3"
与,(?=(?:[^']*'[^']*')*[^']*$)
,现在我想删除引号。我已经测试了表达式[^\s"']+|"([^"]*)"|\'([^\']*)
一个在线正则表达式测试器,它给出了我正在寻找的正确输出。但是,使用表达式时出现语法错误:
String[] columns = Regex.Split(dataLine, "[^\s"']+|"([^"]*)"|\'([^\']*)");
语法错误 ',' 预期
我尝试转义字符但无济于事,我错过了什么吗?
任何帮助将不胜感激!
谢谢。
【问题讨论】:
您可能希望找到一个 CSV 解析器。 见***.com/questions/6542996/… 【参考方案1】:C# 可能正在转义反斜杠。试试:
String[] columns = Regex.Split(dataLine, @"[^\s""']+|"([^""]*)""|\'([^\']*)");
【讨论】:
出于同样的原因,这仍然是一个语法错误。您需要使用""
在逐字字符串文字中表示单个"
(使用@
语法)。
谢谢 - 很好的接机;固定【参考方案2】:
问题是正则表达式中的双引号,编译器阻塞它们,认为它们是字符串的结尾。 你必须像这样逃避它们:
"[^\s\"']+|\"([^\"]*)\"|\'([^\']*)"
Edit
:
您实际上可以使用一个正则表达式完成所有您想要的操作,而无需先拆分:
@"(?<=[""])[^,]*?(?=[""])"
这里我使用了一个@带引号的字符串,其中双引号被加倍而不是转义。
正则表达式使用向后查找来查找双引号,然后匹配除逗号 ',' 之外的任何字符零次或多次,然后向前查找双引号。
如何使用:
string test = @"""0"",""Column"",""column2"",""Column3""";
Regex regex = new Regex(@"(?<=[""])[^,]*?(?=[""])");
foreach (Match match in regex.Matches(test))
Console.WriteLine(match.Value);
【讨论】:
谢谢!很有帮助。【参考方案3】:您需要转义正则表达式中的双引号,因为它们正在关闭字符串文字。此外,要处理“无法识别的转义序列”,您需要转义 \s
中的 \
。
两种方法:
使用反斜杠转义所有相关字符:"[^\\s\"']+|\"([^\"]*)\"|\'([^\']*)"
使用@
语法来表示“逐字”字符串文字。双引号仍然需要被转义,而是对每个"
使用""
:@"[^\s""']+|""([^""]*)""|'([^']*)"
无论如何,当我测试您的新正则表达式时,它似乎也捕获了一些空组,请参见此处:https://dotnetfiddle.net/1WQE4R
【讨论】:
以上是关于C# 正则表达式拆分引号和逗号语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章