C#多字符串匹配

时间:2009-01-08 10:21:16

标签: c# regex search overlapping-matches

我需要C#字符串搜索算法,可以匹配多次出现的模式。例如,如果pattern为'AA'且string为'BAAABBB'Regex产生匹配结果Index = 1,但我需要结果Index = 1,2。我可以强制Regex给出这样的结果吗?

6 个答案:

答案 0 :(得分:13)

使用超前模式: -

“A(?= A)”

这会找到任何A后面跟着另一个A而不消耗以下A.因此AAA将匹配此模式两次。

答案 1 :(得分:4)

总结以前的所有评论:

Dim rx As Regex = New Regex("(?=AA)")
Dim mc As MatchCollection = rx.Matches("BAAABBB")

这将产生您要求的结果。

编辑:
这是C#版本(今天使用VB.NET,所以我不小心继续使用VB.NET)。

Regex rx = new Regex("(?=AA)");
MatchCollection mc = rx.Matches("BAAABBB");

答案 2 :(得分:0)

任何正则表达式都可以提供MatchCollection

的数组

答案 3 :(得分:0)

答案 4 :(得分:0)

试试这个:

       System.Text.RegularExpressions.MatchCollection  matchCol;
       System.Text.RegularExpressions.Regex regX = new System.Text.RegularExpressions.Regex("(?=AA)");

        string index="",str="BAAABBB"; 
        matchCol = regX.Matches(str);
        foreach (System.Text.RegularExpressions.Match mat in matchCol)
            {
                index = index + mat.Index + ",";
            }                       

索引的内容是您要删除的最后一个逗号的内容。

答案 5 :(得分:0)

你真的在寻找只有两个字符长的子串吗?如果是这样,无论你使用什么正则表达式(或者任何非正则表达式技术),搜索一个2000万字符串都会变慢。如果搜索字符串较长,则正则表达式引擎可以使用像Boyer-Moore或Knuth-Morris-Pratt这样的搜索算法来加速搜索 - 实际上越长越好。

顺便说一句,您所谈论的搜索类型称为重叠匹配;我会将其添加到标签中。