[英]Regex (Python) - Match words with two or more distinct vowels
我正在嘗試匹配包含兩個或多個不同元音的字符串中的單詞。 問題可以限制為小寫。
string = 'pool pound polio papa pick pair'
預期結果:
pound, polio, pair
pool
和papa
會失敗,因為它們只包含一個不同的元音。 但是, polio
很好,因為即使它包含兩個o
,它也包含兩個不同的元音( i
和o
)。 mississippi
會失敗,但albuquerque
會通過)。
思考過程:使用環視,可能五次(忽略大寫),用括號括起來,然后是{2}
。 就像是:
re.findall(r'\w*((?=a{1})|(?=e{1})|(?=i{1})|(?=o{1})|(?=u{1})){2}\w*', string)
但是,這匹配所有六個單詞。
我殺死了{1}
,這使它更漂亮( {1}
似乎沒有必要),但它仍然返回所有六個:
re.findall(r'\w*((?=a)|(?=e)|(?=i)|(?=o)|(?=u))\w*', string)
提前感謝您的任何幫助。 我檢查了其他查詢,包括“如何查找帶有兩個元音的單詞” ,但似乎沒有一個足夠接近。 另外,我正在尋找純正則表達式。
你的\\w*((?=a)|(?=e)|(?=i)|(?=o)|(?=u))\\w*
regex匹配所有至少有1個元音的單詞。 \\w*
匹配0+單詞字符,因此第一個模式抓取整個字母,數字和下划線。 然后,回溯開始,正則表達式引擎試圖找到一個跟隨a
, e
, i
, o
或u
。 一旦找到該位置,之前抓取的單詞字符將再次被抓取並使用尾隨\\w*
消耗。
要將整個單詞與至少2個不同的元音相匹配,您可以使用
\b(?=\w*([aeiou])\w*(?!\1)[aeiou])\w+
請參閱正則表達式演示 。
細節
匹配字符串中至少包含兩個不同元音且字符數最少的單詞(據我所知):
\\w*([aeiou])\\w*(?!\\1)[aeiou]\\w*<\/code>
演示: https<\/a> :\/\/regex101.com\/r\/uRgVVa\/1
解釋:
\\w*<\/code> :匹配 0 個或多個單詞字符。
您不需要以單詞邊界(
\\b<\/code> )開頭,因為
\\w<\/code>不包含空格,因此使用
\\b<\/code>將是多余的。
([aeiou])<\/code> :
[aeiou]<\/code>匹配任何一個元音。
它在括號中,因此我們可以參考稍后匹配的元音。 這些第一個括號內的任何內容都是第 1 組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.