我正在尝试编写一个正则表达式来查找包含 2 个或更多 same 辅音序列的所有单词。
我已尝试以下方法,但它已损坏:
xh_data = ("mmh tshhu itshu mama krrrr")
onomat_consonant_words = re.findall (r'\b\w*([b-df-hj-np-tv-z])\1\w*\b', xh_data, flags=re.IGNORECASE)
print (onomat_consonant_words)
它应该给出以下输出 ['mmh', 'tshhu', 'krrr'] 它目前只给出 ['m','h','r']
尝试使用反向引用,但我不确定我在这里做得是否正确。
这里有两个问题:
{
不应出现在您的正则表达式中。它寻找一个字面的左大括号...(在我发表评论后您将其删除)。
findall
所述,当您的正则表达式中有捕获组时,它不会返回完整的匹配项,而只会返回这些组捕获的内容。
一种解决方案是使用
finditer
并提取完整的匹配项:
onomat_consonant_words = [
m[0]
for m in re.finditer(r'\b\w*([b-df-hj-np-tv-z])\1\w*', xh_data, flags=re.IGNORECASE)
]
请注意,您实际上并不需要最后的
\b
。这是贪婪的\w*
所暗示的。