【问题标题】:find words that matches the 3 consecutive vowels Regex查找匹配 3 个连续元音正则表达式的单词
【发布时间】:2020-09-16 13:10:41
【问题描述】:
text = "Life is beautiful"
pattern = r"[aeiou]{3,}"
result = re.findall(pattern, text)
print(result)

期望的结果: ['beautiful']

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

我试过谷歌搜索等等......我找到了多个答案,但没有一个有效! 我是正则表达式的新手,所以也许我遇到了问题,但我不知道如何解决这个问题

我已经尝试使用r"\b[abcde]{3,}\b" 仍然没有,所以请帮忙!!

【问题讨论】:

    标签: python regex string findandmodify


    【解决方案1】:

    您的正则表达式仅捕获 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,它输出相同的结果!!你能解释一下 ?= 在那里做什么吗??
    • 此外,此解决方案无法打印"Obviously, the queen is courageous and gracious.",因为它跳过了Obviously,但会打印其余部分!!
    • @PrabinTamang (?= 是一种前瞻预测,它断言在解析时(就在单词中断之后)有一定数量的字母后跟 3 个元音。您所做的基本上是相同的,并且前瞻并不是真正必要的。如果您使用re.I 标志,则正则表达式确实适用于Obviously,请参阅ideone.com/P3yI1V
    • 非常感谢您的帮助!!是的,可以使用忽略大小写。
    • 我用这个文本尝试了这个方法 = ('Life', 'is', 'beautiful') pattern = r"\b(?=[az]*[aeiou]{3})[ az]+\b" result = re.findall, [pattern, text, re.I] print(result) 但它不起作用。我是新手。我究竟做错了什么?我尝试改变一些东西,但还是一样。我本来想问一个问题,但如果我能在这里得到答案,那就太好了。 @尼克
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多