发生意外的正则表达式结果

时间:2013-09-03 11:51:30

标签: c# regex

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

代码语法:

string parametersText =“\”parameter1 \“,\”parameter2 \“,\”parameter3 \“”;

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

结果:

parameter1
, "parameter2
, "parameter3

但我想得到以下结论:

parameter1
parameter2
parameter3

我该怎么做?

任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:2)

看起来不会消耗字符,因此,它会在下一个\"开始匹配,并在下一个\"(, |$)专门结束。

尝试在lookbehind中添加(, |$)

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

我将捕获组转换为非捕获组btw。

ideone demo

答案 1 :(得分:0)

不要使用Regex?

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

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

或根据建议

parametersText.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.Trim('"', ' '));

答案 2 :(得分:0)

.* greedy 并且会匹配尽可能多的字符,因此在可能的情况下包括, "。您可以在此处阅读相关主题:Greedy, Non-Greedy, All-Greedy Matching in C# Regex