以下代码计算2而不是4:
Regex.Matches("020202020", "020").Count;
Run Code Online (Sandbox Code Playgroud)
我猜测正则表达式开始寻找上一场比赛结束时的下一场比赛.有什么办法可以防止这种情况发生.我有一个'0'和'2'字符串,我试图计算连续三次'2'连续多少次,连续四次'2'等等.
这将按4预期返回:
Regex.Matches("020202020", @"0(?=20)").Count;
Run Code Online (Sandbox Code Playgroud)
先行匹配的20不消费,所以下一场比赛尝试在后的第一个位置开始0.您甚至可以将整个正则表达式作为前瞻:
Regex.Matches("020202020", @"(?=020)").Count;
Run Code Online (Sandbox Code Playgroud)
每次进行零长度匹配时,正则表达式引擎会自动向前移动一个位置.因此,要找到三个2或四个2的所有运行,您可以使用:
Regex.Matches("22222222", @"(?=222)").Count; // 6
Run Code Online (Sandbox Code Playgroud)
...和:
Regex.Matches("22222222", @"(?=2222)").Count; // 5
Run Code Online (Sandbox Code Playgroud)
编辑:再次回顾你的问题,我发现你可能正在寻找2穿插0的问题
Regex.Matches("020202020", @"(?=20202)").Count; // 2
Run Code Online (Sandbox Code Playgroud)
如果您不知道0会有多少,您可以使用:
Regex.Matches("020202020", @"(?=20*20*2)").Count; // 2
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用量词来减少正则表达式中的重复:
Regex.Matches("020202020", @"(?=2(?:0*2){2})").Count; // 2
Run Code Online (Sandbox Code Playgroud)