具有3个或更多元音的正则表达式字符串

时间:2017-05-23 14:57:49

标签: regex

我试图制作一个匹配具有3个或更多元音的String的正则表达式。

我试过这个:

[AEIOU] {3,}

但它只适用于元音在序列中的情况。有什么提示吗?

例如:

  1. Samuel - >有效
  2. 琼 - >无效
  3. Sol Manuel - >有效
  4. Sol - >无效

5 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,在这种情况下,保持简单可能对维护该代码的未来开发人员最有帮助。这是关于正则表达式的一个有趣的部分,你可以使它们非常高效和聪明,然后非常难以为那些不经常更新它们的人。

import re

regex = "[aeiou].*[aeiou].*[aeiou]"

mylist = [
"Samuel",  #yes!
"JOAN",  #no!
"Sol Manuel",  #yes!
"",  #no!
]

for text in mylist:
    if re.search(regex, text, re.IGNORECASE):
        print ("Winner!")
    else:
        print ("Nein!")

如果您没有使用您选择的语言的忽略案例标记,您也可以将每个部分调整为[aeiouAEIOU]。祝好运! :)

答案 1 :(得分:0)

尝试这种模式:

^.*[AEIOUaeiou].*[AEIOUaeiou].*[AEIOUaeiou].*$

我们也可以使用积极的前瞻:

^(?=.*[AEIOUaeiou].*[AEIOUaeiou].*[AEIOUaeiou]).*$

请注意,由于回溯的可能性,我可能更喜欢使用第一种(非超前)模式,因为它应该更有效。

答案 2 :(得分:0)

这可以通过这样的前瞻来实现。

正则表达式: ^(?=.*[aeiou].*[aeiou].*[aeiou])(?:[a-z] *)+$

<强>解释

  • (?=.*[aeiou].*[aeiou].*[aeiou])正向前瞻检查是否存在任何字符,然后是元音三次。

  • (?:[a-zA-Z] *)+匹配您用空格分隔的一个或多个英语单词。

<强> Regex101 Demo

如果不区分大小写模式为OFF,请使用以下正则表达式

正则表达式: ^(?=.*[aeiouAEIOU].*[aeiouAEIOU].*[aeiouAEIOU])(?:[a-zA-Z] *)+$

<强> Regex101 Demo

答案 3 :(得分:0)

只是

(\w*[aeuio]\w*){3,}

或者如果你想要线匹配

^(.*[aeuio].*){3,}$

答案 4 :(得分:0)

我在sniperd的回答中使用了帮助:

def multi_vowel_words(text):
   pattern = r"\w+[aeiou]\w*[aeiou]\w*[aeiou]\w+"
   result = re.findall(pattern, text)
   return result

这甚至适用于大写字母。

如果文本中带有数字和下划线,请使用\w代替[a-zA-Z]