c# - 在 C# 中计算与 Regex 的重叠匹配

标签 c# regex

<分区>

以下代码计算 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

编辑:再次查看您的问题,我发现您可能正在寻找 20

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/

相关文章:

c# - 如何更改 Visual Studio 建模项目的目标框架?

c# - SQL Linq 预留可用性

javascript - Regex101 与 JavaScript String.match 分歧

javascript - 替换 javascript 中负正则表达式的函数

java - 使用正则表达式转义java字符串中的文字

asp.net - 识别纯文本 URL

c# - 简化 Entity Framework Core 查询

c# - 在使用C#编写的COM服务器的Windows上,可以为早绑定(bind)和晚绑定(bind)代码返回SAFEARRAY吗?

c# - 在 Windows 8.1 上禁用触摸视觉反馈(以编程方式)[桌面应用程序]

python - Django url正则表达式的问题