以下代码
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/