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

如何编写正则表达式匹配含连续2个及以上相同辅音的单词

解决正则匹配连续相同辅音单词的问题

你的代码返回单个辅音而非目标单词,核心有两个问题:

  1. re.findall在正则包含捕获组时,默认返回捕获组的匹配内容,而非整个单词;
  2. 原正则的\1仅匹配1次重复(即2个相同辅音),要覆盖2个及以上连续相同的情况,需要用\1+。

修正方案一:用re.finditer提取完整单词

finditer返回匹配对象的迭代器,通过match.group()可以直接获取整个匹配的单词:

import re

xh_data = ("mmh tshhu itshu mama krrrr")
matches = re.finditer(r'\b\w*([b-df-hj-np-tv-z])\1+\w*\b', xh_data, flags=re.IGNORECASE)
onomat_consonant_words = [match.group() for match in matches]
print(onomat_consonant_words)
# 输出: ['mmh', 'tshhu', 'krrrr']

修正方案二:调整正则捕获结构

把整个单词作为外层捕获组,之后提取每组的第一个元素:

import re

xh_data = ("mmh tshhu itshu mama krrrr")
matches = re.findall(r'(\b\w*([b-df-hj-np-tv-z])\2+\w*\b)', xh_data, flags=re.IGNORECASE)
onomat_consonant_words = [word[0] for word in matches]
print(onomat_consonant_words)
# 输出: ['mmh', 'tshhu', 'krrrr']

正则说明

  • \b:匹配单词边界,确保只提取完整单词
  • \w*:匹配任意数量的前置/后置字母数字(包含元音)
  • ([b-df-hj-np-tv-z]):捕获单个辅音(排除a/e/i/o/u元音字母)
  • \1+:匹配与捕获组相同的字符至少1次,实现“连续2个及以上相同辅音”的规则
  • flags=re.IGNORECASE:忽略大小写,兼容大小写混合的场景(如果不需要可以删除)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:10