查找与3个连续元音字母正则表达式匹配的单词

4
text = "Life is beautiful"
pattern = r"[aeiou]{3,}"
result = re.findall(pattern, text)
print(result)

期望结果: ['beautiful']

我得到的输出是: ['eau']

我尝试了谷歌搜索等方法......我找到了多个答案,但都没有用!! 我是正则表达式方面的新手,所以可能存在问题,但我不确定如何使其输出

我尝试使用r"\b[abcde]{3,}\b",但仍然没有输出,请帮助我!!

5个回答

4
你的正则表达式只能捕获3个连续的元音字母,所以你需要扩展它以捕获单词的其他部分。可以通过在两个单词分界处查找一系列字母,并使用正向前瞻来查找序列中的3个连续元音字母来实现这一点。例如:
import re

text = "Life is beautiful"
pattern = r"\b(?=[a-z]*[aeiou]{3})[a-z]+\b"
result = re.findall(pattern, text, re.I)
print(result)

输出:

['beautiful']

非常感谢您的回答,我一直在尝试弄清楚这个问题!我这样写:\b[a-z]+[aeiou]{3,}[a-z]+\b,它输出了相同的结果!!您能解释一下那里的 ?= 是做什么用的吗? - Prab
此外,这个解决方案无法打印"显然,女王是勇敢和优雅的。"因为它跳过了“显然”但打印了其余部分! - Prab
@PrabinTamang (?= 是一个前瞻断言,它断言在解析的那一点(单词分隔符之后)有一些字母后跟着3个元音字母。你所做的本质上是相同的,前瞻并不是必要的。如果使用 re.I 标志,正则表达式对于 Obviously 确实有效,请参见 https://ideone.com/P3yI1V - Nick
非常感谢您的帮助!是的,使用忽略大小写的方式可以解决问题。 - Prab
我尝试使用这个文本('Life', 'is', 'beautiful')来运行这个方法: pattern = r"\b(?=[a-z]*[aeiou]{3})[a-z]+\b" result = re.findall, [pattern, text, re.I] print(result) 但是它没有起作用。我是新手。我做错了什么?我尝试改变一些东西,但还是一样。我本来想问一个问题,但如果我能在这里得到答案就太好了。@Nick - Riel
嗨,Riel,如果你有问题,你应该总是提出来,除非它真的可以通过这一个回答。如果需要的话,你可以参考这一个来获得上下文。但基本上你的问题是你的 text 是一个列表,而不是一个字符串;你需要单独搜索 text 中的每个字符串,类似于 for t in text: result= re.findall(pattern, t,re.I) print(result) - Nick

1
正则表达式的第一部分寻找所有字母,不论大小写(以及数字和下划线,但这并非必要),但对于这个问题来说,它是有效的。我们只需要找到在一个单词中(至少)连续三个元音字母之前的字符。然后,如果有剩余的字母,我们通过寻找尾部的小写字母来完成匹配。
pattern = r"[\w]+[aeiou]{3,}[a-z]+"

0
pattern=r"\b\w*[aeiou]{3,}\w*\b"

\w* 对于任何可能存在于元音字母之前和之后的字母数字


0
对于前面的解决方案,稍作改进就是使用\w而不是a-z作为字符类(这将匹配大小写字母)。
\b[\w]+[aeiou]{3,}[\w]+\b

干杯!


0

我知道回复晚了,但是想要分享一下给那些搜索这个问题的人!

答案: pattern = r"\b[a-zA-Z][aeiou]{3,}[a-z]\b" 或者尝试使用 [\w]* 替换 [a-zA-Z]

将第一个匹配项从 [a-z] 改为 [a-zA-Z]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接