以下代码段给出了意想不到的结果。但是,我想采取正确的结果。
代码语法:
string parametersText =“\”parameter1 \“,\”parameter2 \“,\”parameter3 \“”;
string findPattern = "(?<=\").*?(?=\"(, |$))";
MatchCollection mc = Regex.Matches(parametersText, findPattern);
结果:
parameter1
, "parameter2
, "parameter3
但我想得到以下结论:
parameter1
parameter2
parameter3
我该怎么做?
任何帮助都将非常感激。
答案 0 :(得分:2)
看起来不会消耗字符,因此,它会在下一个\"
开始匹配,并在下一个\"(, |$)
专门结束。
尝试在lookbehind中添加(, |$)
:
(?<=(?:, |^)\").*?(?=\"(?:, |$))
我将捕获组转换为非捕获组btw。
答案 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