字符串C#中正则表达式第n个匹配的索引

时间:2016-04-30 11:25:51

标签: c# regex

任何人都可以帮我找到以下字符串中正则表达式的第5场比赛的索引(匹配*不在双引号内)?

ABC*DEF*PQR*"LMN*ABC"*XYZ*MNO*ABC*XYZ

即。 25(就在MNO之前)

请帮助使用C#代码在控制台输出上写入值25。

我使用了正则表达式:\*(?=([^"]*"[^"]*")*[^"]*$)

谢谢!

2 个答案:

答案 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