1

以下代码段给了我意想不到的结果。但是,我想得到正确的结果。

代码语法:

string parametersText = "\"parameter1\", \"parameter2\", \"parameter3\"";

    string findPattern = "(?<=\").*?(?=\"(, |$))";
    MatchCollection mc = Regex.Matches(parametersText, findPattern);

结果:

parameter1
, "parameter2
, "parameter3

但我想得到如下:

parameter1
parameter2
parameter3

我怎样才能做到这一点?

任何帮助将不胜感激。

4

3 回答 3

2

环顾四周不消耗字符,因此,它在下一个开始匹配,并在下一个\"结束\"(, |$)

尝试(, |$)在后视中添加:

(?<=(?:, |^)\").*?(?=\"(?:, |$))

顺便说一句,我将捕获组转换为非捕获组。

ideone演示

于 2013-09-03T12:03:41.340 回答
0

.*贪婪的并且会匹配尽可能多的字符,因此包括尽可能多的字符, "。您可以在此处阅读该主题:C# Regex 中的贪婪、非贪婪、全贪婪匹配

于 2013-09-03T11:59:05.857 回答
0

不要使用正则表达式?

string parametersText = "\"parameter1\", \"parameter2\", \"parameter3\"";

parametersText.Split(',').Select(a => a.Replace("\"", "").Trim());

或根据建议

parametersText.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.Trim('"', ' '));
于 2013-09-03T11:55:34.990 回答