我试图制作一个匹配具有3个或更多元音的String的正则表达式。
我试过这个:
[AEIOU] {3,}
但它只适用于元音在序列中的情况。有什么提示吗?
例如:
答案 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]
。