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

如何编写正则匹配统计多形式oh my god短语并解决漏匹配问题

问题说明

需求为遍历文本文件,统计短语oh my god的出现次数,该短语存在多种书写变体,例如omg、oh-my-god、oh my god!等。
原有正则存在漏匹配问题,无法统计全部符合要求的匹配项,原代码如下:

regex = re.compile(r'\b(omg|(oh[^A-Za-z0-9]my[^A-Za-z0-9]god)')
问题原因

原有正则存在3个核心问题:

  • 语法错误:模式串缺少闭合括号,直接运行会抛出语法异常
  • 分隔符匹配逻辑错误:[^A-Za-z0-9]要求oh和my、my和god之间必须存在恰好1个非字母数字字符,既无法匹配ohmygod这类无分隔符的连写形式,也无法匹配oh--my god这类多分隔符的形式
  • 未配置大小写忽略规则,会漏掉Oh My God、OMG这类大小写混合的写法
可用方案

调整正则匹配逻辑,允许词之间存在0个或多个非字母数字分隔符,开启不区分大小写匹配,修正语法错误,完整实现代码如下:

import re
from pathlib import Path

# 正则说明:
# 1. \b 匹配单词边界,避免匹配到嵌入在长单词里的片段
# 2. (?:omg|oh[^a-z0-9]*my[^a-z0-9]*god) 非捕获分组,匹配两种核心形式:缩写omg、全拼oh my god(词之间允许0个或多个非字母数字分隔符,覆盖连写、连字符、多标点分隔等场景)
# 3. re.IGNORECASE 开启不区分大小写匹配,覆盖各种大小写组合
count_pattern = re.compile(r'\b(?:omg|oh[^a-z0-9]*my[^a-z0-9]*god)\b', re.IGNORECASE)

total_count = 0
# 替换为实际的文本文件路径
target_file = Path("target.txt")
with open(target_file, 'r', encoding='utf-8') as f:
    for line in f:
        total_count += len(count_pattern.findall(line))

print(f"目标短语总出现次数:{total_count}")

该正则可以覆盖的常见变体包括但不限于:

  • 缩写形式:omg、OMG、Omg
  • 空格分隔:oh my god、Oh My God
  • 符号分隔:oh-my-god、oh.my.god、oh_my_god
  • 连写形式:ohmygod、OhMyGod
  • 带尾部标点:oh my god!、omg?、oh my god...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:06:20