簡體   English   中英

匹配包含所有元音的單詞的正則表達式是什么?

[英]What is the regex to match the words containing all the vowels?

我正在 python 中學習正則表達式,但似乎無法掌握它。 我正在嘗試過濾掉所有包含英語元音的單詞,這是我的正則表達式:

r'\b(\S*[aeiou]){5}\b'

似乎它太模糊了,因為任何元音(甚至是重復的)都可以出現在任何地方,並且任何數字都是次數,所以這是拋出諸如“可操作”、“不幸”之類的詞,它們確實將元音計數為 5,但不是所有元音. 我環顧了互聯網,發現了這個正則表達式:

r'[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*

但看起來,它只是為了元音的順序出現,比我想要完成的任務非常有限。 有人可以在為我遇到的問題制作正則表達式時“大聲思考”嗎?

如果您打算將單詞匹配為僅由英文字母組成的文本塊,您可以使用正則表達式,例如

\b(?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u)[a-zA-Z]+\b

查看正則表達式演示

要支持英語以外的語言,您可以將[a-zA-Z]+替換為[^\\W\\d_]+

如果您要匹配的“單詞”是一大塊非空白字符,您可以使用

(?<!\S)(?=\S*?a)(?=\S*?e)(?=\S*?i)(?=\S*?o)(?=\S*?u)\S+

請參閱此正則表達式演示

使用原始字符串文字在 Python 中定義這些模式,例如:

rx_AllVowelWords = r'\b(?=\w*?a)(?=\w*?e)(?=\w*?i)(?=\w*?o)(?=\w*?u)[a-zA-Z]+\b'

細節

  • \\b(?=\\w*?a)(?=\\w*?e)(?=\\w*?i)(?=\\w*?o)(?=\\w*?u)[a-zA-Z]+\\b :
    • \\b - 一個詞邊界,這里是一個起始詞邊界
    • (?=\\w*?a)(?=\\w*?e)(?=\\w*?i)(?=\\w*?o)(?=\\w*?u) - 一個正數序列那些字檢測邊界位置后立即觸發,並要求存在向前看符號aeiou后的任何0+字字符(字母,數字,下划線-你可以取代\\w*?[^\\W\\d_]*?僅檢查字母)
    • [a-zA-Z]+ - 1 個或多個 ASCII 字母(替換為[^\\W\\d_]+以匹配所有字母)
    • \\b - 一個詞邊界,這里是一個尾隨詞邊界

第二個圖案細節:

  • (?<!\\S)(?=\\S*?a)(?=\\S*?e)(?=\\S*?i)(?=\\S*?o)(?=\\S*?u)\\S+ :
    • (?<!\\S) - 字符串開頭或空格之后的位置
    • (?=\\S*?a)(?=\\S*?e)(?=\\S*?i)(?=\\S*?o)(?=\\S*?u) - 所有英語元音必須出現 - 以任何順序 - 在除空格之外的任何 0+ 個字符之后
    • \\S+ - 1+ 個非空白字符。

我想不出一種簡單的方法來使用單個正則表達式查找“​​帶有所有元音的單詞”,但是可以通過將正則表達式分別與 a、e、i、o 和 u 結合在一起來輕松完成。 例如,像下面這樣的 Python 腳本應該確定給定的英語單詞是否包含所有元音(以任何順序,任何多重性):

#! /usr/bin/python3
# all-vowels.py
import sys
import re
if len(sys.argv) != 2: sys.exit()
word=sys.argv[1]
if re.search(r'a', word) and re.search(r'e', word) and re.search(r'i', word) and re.search(r'o', word) and re.search(r'u', word):
   print("Word has all vowels!")
else:
   print("Word does NOT have all vowels.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM