检索所有可能的子串匹配与字符串中的n个字符

时间:2009-12-16 03:46:05

标签: c# regex vb.net

基本上我想从字符串中检索所有可能的子字符串匹配,这是我的初始代码,但它只返回2个匹配。

String input = "abc12345abcd";
Regex  regex = new Regex(@"[A-Za-z]{3}"); //this will only return 2 matches
MatchCollection  matches = regex.Matches(input);

如何使用正则表达式获得以下匹配?

abc
abc
bcd

这是否可行,如果没有,LINQ会帮助这个吗?

2 个答案:

答案 0 :(得分:3)

String input = "abc12345abcd";
Regex regex = new Regex(@"[A-Za-z]{3}");
int i=0;
while(i<input.Length){
    Match m=regex.Match(input,i);
    if(m.Success){
        Console.WriteLine(m.Value);
        i=m.Index+1; //just increment one char, instead of length of match string
    }else break;
}

结果

abc
abc
bcd

答案 1 :(得分:2)

我相信虽然没有明确记录,Matches会返回非重叠匹配 - 因此abc的第二个匹配意味着bcd没有返回任何内容因为它会重叠。

要获得重叠匹配,您可以编写一个调用Match(单数)方法的循环来一次获取一个匹配对象;只要match对象的Success属性为true,就会继续循环使用Match方法的第二个参数,而不是前一个匹配对象的Index属性(到得到下一场比赛是否重叠。)