C#中正则表达式交集匹配

8

我想知道是否有可能获得包含所有匹配项的MatchCollection,即使它们之间存在交集。

string input = "a a a";
Regex regex = new Regex("a a");
MatchCollection matches = regex.Matches(input);
Console.WriteLine(matches.Count);

这段代码返回1,但我想让它返回2。如何实现?
谢谢您的帮助。

2个回答

8
string input = "a a a";
Regex regexObj = new Regex("a a");
Match matchObj = regexObj.Match(input);
while (matchObj.Success) {
    matchObj = regexObj.Match(input, matchObj.Index + 1); 
}

将从上一次匹配的位置的下一个字符开始迭代字符串,因此找到所有匹配项。


看起来就是我需要的。谢谢。 - StuffHappens
非常好,我本来想推荐使用 string.indexOf 来做类似的事情,假设搜索字符串是一个基本字符串。我在想是否存在一种复杂的正则表达式使该方法无法工作......嗯 - juharr

0

你可以使用 while 循环,通过将 "a a" 替换为 "a" 并再次与正则表达式匹配,直到没有匹配项。


这个例子很简化。我的输入字符串和正则表达式都要复杂得多。所以你的解决方案在那种情况下行不通。无论如何,还是谢谢。 - StuffHappens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接