出现意外的Regex结果

本文关键字:Regex 结果 意外 | 更新日期: 2023-09-27 18:30:10

下面的代码段给了我意外的结果。但是,我希望得到正确的结果。

代码语法:

string parametersText="''"parameter1''",''"parametr2''","parameter3''";

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

结果:

parameter1
, "parameter2
, "parameter3

但我想得到如下:

parameter1
parameter2
parameter3

我该如何解决这个问题?

任何帮助都将不胜感激。

出现意外的Regex结果

查找不消耗字符,因此,它在下一个'"上开始匹配,并在下一次'"(, |$)上特定结束。

尝试在查找表中添加(, |$)

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

顺便说一句,我把捕获组转换成了非捕获组。

视频演示

.*贪婪,并且将匹配尽可能多的字符,从而在可能的情况下包括, "。您可以在这里阅读主题:C#Regex 中的贪婪、非贪婪、所有贪婪匹配

不使用Regex?

string parametersText = "'"parameter1'", '"parameter2'", '"parameter3'"";
parametersText.Split(',').Select(a => a.Replace("'"", "").Trim());

或根据的建议

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