<分区>
以下代码计算 2 而不是 4:
Regex.Matches("020202020", "020").Count;
我猜正则表达式从上一场比赛结束时开始寻找下一场比赛。有什么办法可以防止这种情况。我有一串“0”和“2”,我正在尝试计算连续出现三个“2”、连续出现四个“2”等的次数。
<分区>
以下代码计算 2 而不是 4:
Regex.Matches("020202020", "020").Count;
我猜正则表达式从上一场比赛结束时开始寻找下一场比赛。有什么办法可以防止这种情况。我有一串“0”和“2”,我正在尝试计算连续出现三个“2”、连续出现四个“2”等的次数。
最佳答案
这将如您所料返回 4
:
Regex.Matches("020202020", @"0(?=20)").Count;
先行匹配20
而不消耗它,因此下一次匹配尝试从第一个0<之后的位置开始
。你甚至可以做整个正则表达式作为前瞻:
Regex.Matches("020202020", @"(?=020)").Count;
每次进行零长度匹配时,正则表达式引擎都会自动向前移动一个位置。因此,要查找三个 2
或四个 2
的所有运行,您可以使用:
Regex.Matches("22222222", @"(?=222)").Count; // 6
...和:
Regex.Matches("22222222", @"(?=2222)").Count; // 5
编辑:再次查看您的问题,我发现您可能正在寻找 2
和 0
的
Regex.Matches("020202020", @"(?=20202)").Count; // 2
如果你不知道会有多少个0
,你可以使用这个:
Regex.Matches("020202020", @"(?=20*20*2)").Count; // 2
当然,您可以使用量词来减少正则表达式中的重复:
Regex.Matches("020202020", @"(?=2(?:0*2){2})").Count; // 2
关于c# - 在 C# 中计算与 Regex 的重叠匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943066/