我需要可以匹配多次出现的模式的 C# 字符串搜索算法。例如,如果模式是 'AA' 并且字符串是 'BAAABBB' 正则表达式生成匹配结果索引 = 1,但我需要结果索引 = 1,2。我可以强制正则表达式给出这样的结果吗?
matko
问问题
12921 次
6 回答
13
使用前瞻模式:-
“A(?=A)”
这会找到后面跟着另一个 A 的任何 A 而不会消耗后面的 A。因此 AAA 将匹配此模式两次。
于 2009-01-08T10:26:54.590 回答
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");
于 2009-01-08T10:52:45.503 回答
0
任何正则表达式都可以给出MatchCollection的数组
于 2009-01-08T10:24:43.470 回答
0
正则表达式.Matches() http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchcollection.aspx
于 2009-01-08T10:26:25.993 回答
0
您真的在寻找只有两个字符长的子字符串吗?如果是这样,无论您使用什么正则表达式(或任何非正则表达式技术,就此而言),搜索 2000 万个字符串都会很慢。如果搜索字符串较长,正则表达式引擎可以使用像 Boyer-Moore 或 Knuth-Morris-Pratt 这样的搜索算法来加快搜索速度——事实上,越长越好。
顺便说一句,您所说的搜索称为重叠匹配;我会把它添加到标签中。
于 2009-01-10T17:19:59.037 回答
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 + ",";
}
index 的内容是您在删除最后一个逗号后要查找的内容。
于 2009-01-08T11:33:01.990 回答