C#正则表达式拆分引号和逗号语法错误[重复]

问题描述 投票:0回答:3

我有一个文本文件如下:

"0","Column","column2","Column3"

我已设法将数据分解为以下内容:

"0"
"Column"
"Column2"
"Column3"

,(?=(?:[^']*'[^']*')*[^']*$),现在我想删除引号。我已经测试了表达式[^\s"']+|"([^"]*)"|\'([^\']*)一个在线正则表达式测试器,它提供了正确的输出我正在寻找。但是,使用表达式时出现语法错误:

String[] columns = Regex.Split(dataLine, "[^\s"']+|"([^"]*)"|\'([^\']*)");

语法错误','预期

我试过逃避角色,但无济于事,我错过了什么?

任何帮助将不胜感激!

谢谢。

c# asp.net regex
3个回答
0
投票

问题是正则表达式中的双引号,编译器对它们扼杀,认为它们是字符串的结尾。你必须逃避他们,像这样:

"[^\s\"']+|\"([^\"]*)\"|\'([^\']*)"

Edit

实际上,您可以使用一个正则表达式执行所有操作,而无需先进行拆分:

@"(?<=[""])[^,]*?(?=[""])"

这里我使用@引号字符串,其中双引号加倍而不是转义。

正则表达式使用后面的查找双引号,然后匹配任何字符,除了逗号','零多次,然后展望双引号。

如何使用:

string test = @"""0"",""Column"",""column2"",""Column3""";
Regex regex = new Regex(@"(?<=[""])[^,]*?(?=[""])");
foreach (Match match in regex.Matches(test))
{
    Console.WriteLine(match.Value);
}

1
投票

C#可能正在逃避反斜杠。尝试:

String[] columns = Regex.Split(dataLine, @"[^\s""']+|"([^""]*)""|\'([^\']*)");

0
投票

你需要在正则表达式中转义双引号,因为它们正在关闭字符串文字。此外,要处理'无法识别的转义序列',你需要逃离\中的\s

两种方法:

  • 使用反斜杠逃离所有关注的角色:"[^\\s\"']+|\"([^\"]*)\"|\'([^\']*)"
  • 使用@语法表示“逐字”字符串文字。双引号仍然需要被转义,而是使用""为每个"@"[^\s""']+|""([^""]*)""|'([^']*)"

无论如何,当我测试你的新正则表达式时,它似乎也捕获了一些空组,请看这里:https://dotnetfiddle.net/1WQE4R

© www.soinside.com 2019 - 2024. All rights reserved.