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

如何让第三方regex模块返回匹配计数及零匹配实例?

如何让正则匹配计数包含无匹配项的0值(兼容第三方regex模块)

需求:使用第三方regex模块做重叠匹配时,希望输出的计数结果里,不光有实际匹配到的项,所有未匹配的目标组合也要显示0值。比如运行print(Counter(reg.findall('[ABCD][ABCD]', "AAABC", overlapped=True)))时,AD、BA、BB、BD、DA、DB、DC、DD这些没匹配到的项也得出现在结果里,值为0。

简便实现方法

核心思路是先明确所有需要统计的目标组合,再把正则匹配的统计结果和全量组合做合并,自动补全0值,完全兼容regex模块:

  1. 生成全量目标组合:先列出所有由A/B/C/D组成的双字符组合,这是我们要统计的完整范围。
  2. 统计匹配结果:用regex.findall开启重叠匹配后,用Counter统计各组合的出现次数。
  3. 补全0值:以全量组合为基准,把统计结果对应填充,没匹配到的项直接设为0。

示例代码

import regex
from collections import Counter

# 生成所有A/B/C/D组成的双字符组合
all_possible_pairs = [f"{first}{second}" for first in 'ABCD' for second in 'ABCD']
# 待处理文本
target_text = "AAABC"

# 执行重叠匹配并统计已匹配项的次数
matched_counts = Counter(regex.findall('[ABCD][ABCD]', target_text, overlapped=True))

# 合并全量组合与统计结果,补全0值
full_result = {pair: matched_counts.get(pair, 0) for pair in all_possible_pairs}

# 按顺序输出结果
for pair, count in sorted(full_result.items()):
    print(f"{pair}: {count}")

额外技巧:保持Counter类型

如果需要结果还是Counter对象,可以先初始化一个全量0值的Counter,再更新匹配结果:

full_counter = Counter({pair: 0 for pair in all_possible_pairs})
full_counter.update(matched_counts)
print(full_counter)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:27:22