以下代码

string expression = "(\\{[0-9]+\\})";
RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
Regex tokenParser = new Regex(expression, options);

MatchCollection matches = tokenParser.Matches("The {0} is a {1} and the {2} is also a {1}");

将匹配并捕获“{0}”、“{1}”、“{2}”和“{1}”。

是否可以更改它(正则表达式或 RegEx 的选项),以便匹配并捕获“{0}”、“{1}”和“{2}”。换句话说,每场比赛应该只捕获一次?

最佳答案

以下是您可以用于纯正则表达式解决方案的内容:

Regex r = new Regex(@"(\{[0-9]+\}|\[[^\[\]]+\])(?<!\1.*\1)",
                    RegexOptions.Singleline);

但是,出于效率和可维护性的考虑,您可能最好使用像您发布的那样的混合解决方案。

关于c# - 防止 RegEx 中的重复匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1673776/

10-11 15:23