我需要C#字符串搜索算法,可以匹配多次出现的模式。例如,如果pattern为'AA'且string为'BAAABBB'Regex产生匹配结果Index = 1,但我需要结果Index = 1,2。我可以强制Regex给出这样的结果吗?
答案 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)
Regex.Matches() http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchcollection.aspx
答案 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这样的搜索算法来加速搜索 - 实际上越长越好。
顺便说一句,您所谈论的搜索类型称为重叠匹配;我会将其添加到标签中。