如何编写正则表达式来查找序列中具有 2 个或更多相同辅音的所有单词

问题描述 投票:0回答:1

我正在尝试编写一个正则表达式来查找包含 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']

尝试使用反向引用,但我不确定我在这里做得是否正确。

python python-re findall
1个回答
0
投票

这里有两个问题:

  • {
    不应出现在您的正则表达式中。它寻找一个字面的左大括号...(在我发表评论后您将其删除)。

  • 正如文档中关于

    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*
所暗示的。

© www.soinside.com 2019 - 2024. All rights reserved.