[英]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)
- 一個正數序列那些字檢測邊界位置后立即觸發,並要求存在向前看符號a
, e
, i
, o
和u
后的任何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.