这个问题在这里已有答案:
我有一个文本文件如下:
"0","Column","column2","Column3"
我已设法将数据分解为以下内容:
"0"
"Column"
"Column2"
"Column3"
与,(?=(?:[^']*'[^']*')*[^']*$)
,现在我想删除引号。我已经测试了表达式[^\s"']+|"([^"]*)"|\'([^\']*)
一个在线正则表达式测试器,它提供了正确的输出我正在寻找。但是,使用表达式时出现语法错误:
String[] columns = Regex.Split(dataLine, "[^\s"']+|"([^"]*)"|\'([^\']*)");
语法错误','预期
我试过逃避角色,但无济于事,我错过了什么?
任何帮助将不胜感激!
谢谢。
问题是正则表达式中的双引号,编译器对它们扼杀,认为它们是字符串的结尾。你必须逃避他们,像这样:
"[^\s\"']+|\"([^\"]*)\"|\'([^\']*)"
Edit
:
实际上,您可以使用一个正则表达式执行所有操作,而无需先进行拆分:
@"(?<=[""])[^,]*?(?=[""])"
这里我使用@引号字符串,其中双引号加倍而不是转义。
正则表达式使用后面的查找双引号,然后匹配任何字符,除了逗号','零多次,然后展望双引号。
如何使用:
string test = @"""0"",""Column"",""column2"",""Column3""";
Regex regex = new Regex(@"(?<=[""])[^,]*?(?=[""])");
foreach (Match match in regex.Matches(test))
{
Console.WriteLine(match.Value);
}
C#可能正在逃避反斜杠。尝试:
String[] columns = Regex.Split(dataLine, @"[^\s""']+|"([^""]*)""|\'([^\']*)");
你需要在正则表达式中转义双引号,因为它们正在关闭字符串文字。此外,要处理'无法识别的转义序列',你需要逃离\
中的\s
。
两种方法:
"[^\\s\"']+|\"([^\"]*)\"|\'([^\']*)"
@
语法表示“逐字”字符串文字。双引号仍然需要被转义,而是使用""
为每个"
:@"[^\s""']+|""([^""]*)""|'([^']*)"
无论如何,当我测试你的新正则表达式时,它似乎也捕获了一些空组,请看这里:https://dotnetfiddle.net/1WQE4R