【问题标题】:Regex to extract words that contain three vowels正则表达式提取包含三个元音的单词
【发布时间】:2020-06-06 15:44:06
【问题描述】:

我正在尝试创建一个函数来从以下字符串中提取具有 3 个连续元音的单词

import re
def three_vowel_words(text):
     pattern =  "[\w]+[aeiou]{3}"
     result = re.findall(pattern, text)
     return result

print(three_vowel_words("Our team was victorious over theirs in the contest."))
#the output should be ["victorious"]

print(three_vowel_words("Obviously, the acquaintance is serious and ambitious.")) 
#the output should be ["Obviously","acquaintance","serious","ambitious"]

但是我得到的输出如下:

["victoriou"]

["Obviou", "acquai", "seriou", "ambitiou"]

谁能帮我纠正我的正则表达式模式,以便提取完整的单词。

谢谢。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    将其设为"\w+[aeiou]{3}\w+",这样单词的其余部分也匹配。使用您当前的解决方案,当找到 3 个连续的元音时匹配停止。

    编辑:正如@usr2564301 和@Tomerikoo 所指出的,更通用的方法是"\w*[aeiou]{3}\w*"。这样,以 3 个元音开头或结尾或只有 3 个元音的单词也会被匹配。

    【讨论】:

    • 更好,但现在 必须 在任何 3 个元音序列之后有另一个字母。您的 cadeau 适用于 OP 小样本集,但不适用于其他词。
    • 也许(\w+)? 可能更笼统
    • @leena 很高兴它有帮助。另见编辑部分。感谢 usr2564301 和 Tomerikoo 的观察/建议。
    • 当之无愧的投票,因为我实际上错过了第一 \w+;现在它也匹配 eau (如果你再次原谅我的法语 - 想不出一个以 3 个元音开头的英语单词)。 @Tomerikoo,对于 GREP (\w+)? 和 OP 建议的 [\w] 一样不必要 ...
    • @usr2564301 哇,你说的太对了!我想我在试图扩展现有代码的过程中被困在盒子里,我看不到明显的修复。感谢大开眼界。我正在考虑从尴尬中删除该评论,但会将其留给未来的读者
    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多