You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中能否统计正则表达式各分组的匹配次数?

解决正则表达式分组匹配次数统计的问题

嘿,我来帮你搞定这个统计分组匹配次数的问题!

你遇到的核心问题是:你的正则表达式是三个分支的捕获分组,每次成功匹配只会有其中一个分组捕获到内容,另外两个分组处于未匹配状态。而Matches()方法返回的是所有成功匹配项的总数(也就是三个分支的匹配总和),所以直接拿Count只能得到总次数,没法区分每个分组的具体匹配数。

解决方案:遍历匹配项,检查每个分组的匹配状态

我们可以遍历每个Match对象,通过Groups[索引].Success属性判断当前匹配来自哪个分组,再分别计数。

以下是对应你代码风格的C#示例(推断是.NET环境):

string content = "There are many kids in the playground. It's about 1 23 45 5;中文等等";
// 加@符号避免正则转义问题
Regex characterPattern = new Regex(@"([0-9])|([a-zA-Z])|([一-龥])");

// 初始化三个分组的计数器
int digitCount = 0;
int letterCount = 0;
int chineseCount = 0;

// 遍历所有匹配结果
foreach (Match match in characterPattern.Matches(content))
{
    // 分组1对应[0-9]规则
    if (match.Groups[1].Success)
    {
        digitCount++;
    }
    // 分组2对应[a-zA-Z]规则
    else if (match.Groups[2].Success)
    {
        letterCount++;
    }
    // 分组3对应[一-龥]规则
    else if (match.Groups[3].Success)
    {
        chineseCount++;
    }
}

// 输出预期结果
Console.WriteLine($"数字匹配次数:{digitCount}");   // 输出:6
Console.WriteLine($"中文匹配次数:{chineseCount}"); // 输出:4
Console.WriteLine($"字母匹配次数:{letterCount}");   // 总匹配数49-6-4=39

关键说明

  • Groups[0]是整个正则的匹配结果,我们定义的三个捕获分组对应Groups[1]、Groups[2]、Groups[3],顺序和正则里的分组顺序完全一致。
  • 因为你的三个正则分支是互斥的(一个字符不可能同时是数字、字母和中文),所以每个Match对象只会有一个分组的Success属性为true,用else if就足够区分。

这样就能精准统计到每个分组的匹配次数,得到你想要的结果啦!

内容的提问来源于stack exchange,提问作者doublnt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:52