任何人都可以帮我找到以下字符串中正则表达式的第5场比赛的索引(匹配*不在双引号内)?
ABC*DEF*PQR*"LMN*ABC"*XYZ*MNO*ABC*XYZ
即。 25(就在MNO之前)
请帮助使用C#代码在控制台输出上写入值25。
我使用了正则表达式:\*(?=([^"]*"[^"]*")*[^"]*$)
谢谢!
答案 0 :(得分:1)
以下是一个可以解决问题的正则表达式。唯一的限制是,如果您在字符串中输入多于当前的双引号,则会导致灾难性的回溯
(?:(?:(?:[^*"]*)(?:"[^"]*")*)*(\*)){5}
<强> Regex Demo 强>
答案 1 :(得分:0)
string text = "ABC*DEF*PQR*\"LMN* ABC\"*XYZ*MNO*ABC*XYZ";
string pattern = "\\*(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
var matches = Regex.Matches(text, pattern);
Console.WriteLine(matches[4].Index); // indexing from 0, so 4, not 5