下面的代码段给了我意外的结果。但是,我希望得到正确的结果。
代码语法:
string parametersText="\"parameter1\",\"parametr2\","parameter3\";
string findPattern = "(?<=").*?(?="(, |$))";
MatchCollection mc = Regex.Matches(parametersText, findPattern);
结果:
parameter1
, "parameter2
, "parameter3
但我想得到如下:
parameter1
parameter2
parameter3
我该如何解决这个问题?
任何帮助都将不胜感激。
查找不消耗字符,因此,它在下一个"
上开始匹配,并在下一次"(, |$)
上特定结束。
尝试在查找表中添加(, |$)
:
(?<=(?:, |^)").*?(?="(?:, |$))
顺便说一句,我把捕获组转换成了非捕获组。
视频演示
.*
是贪婪,并且将匹配尽可能多的字符,从而在可能的情况下包括, "
。您可以在这里阅读主题:C#Regex 中的贪婪、非贪婪、所有贪婪匹配
不使用Regex?
string parametersText = ""parameter1", "parameter2", "parameter3"";
parametersText.Split(',').Select(a => a.Replace(""", "").Trim());
或根据的建议
parametersText.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(a => a.Trim('"', ' '));