簡體   English   中英

在Python中使用正則表達式來查找遵循模式的單詞:元音,輔音,元音,輔音

[英]Regex in Python to find words that follow pattern: vowel, consonant, vowel, consonant

試圖在Python中學習正則表達式,找到具有連續元音 - 輔音或輔音 - 元音組合的單詞。 我如何在正則表達式中執行此操作? 如果無法在Regex中完成,是否有一種在Python中執行此操作的有效方法?

我相信你應該能夠使用這樣的正則表達式:

r"([aeiou][bcdfghjklmnpqrstvwxz])+"

用於匹配元音后跟輔音和:

r"([bcdfghjklmnpqrstvwxz][aeiou])+"

用於匹配輔音,然后是元音。 作為參考,+表示它將匹配它可以找到的該模式的最大重復。 例如,將第一個模式應用於“ababab”將返回整個字符串,而不是單個出現的“ab”。

如果你想匹配一個或多個元音后跟一個或多個輔音,它可能如下所示:

r"([aeiou]+[bcdfghjklmnpqrstvwxz]+)+"

希望這可以幫助。

^(([aeiou][^aeiou])+|([^aeiou][aeiou])+)$

>>> import re
>>> consec_re = re.compile(r'^(([aeiou][^aeiou])+|([^aeiou][aeiou])+)$')
>>> consec_re.match('bale')
<_sre.SRE_Match object at 0x01DBD1D0>
>>> consec_re.match('bail')
>>>

如果將輔音有向圖映射為單個輔音,則最長的這個單詞是解剖學病理學的10 * VC字符串。

如果你正確映射y ,那么你得到完整的字符串,如乙酰丙酮類 ,8 * VC和hypocotyledonary為8 * CV。

如果你不需要字符串是完整的,你會得到一個9 * CV模式的chemicomineralogical和9 * VC模式的overigginativeness

如果連續輔音或元音的運行允許交替,則有很多10 *個單詞,如(C+V+)+ 這些包括腹腔鏡子宮切開術輸尿管囊腫

主要技巧是首先將所有輔音映射到C,將所有元音映射到V,然后進行VC或CV匹配。 對於Y,您必須做前瞻和/或后視,以確定它是否映射到該位置的C或V.

可以告訴你我使用的模式,但你可能不會對我感到高興。 :) 例如:

 (?<= \p{IsVowel} )     [yY] (?= \p{IsVowel} )  # counts as a C
 (?<= \p{IsConsonant} ) [yY]                    # counts as a V
                        [yY] (?= \p{IsVowel} )  # counts as a C

然后,主要技巧就是通過查找VC或CV交替的重疊匹配

 (?= ( (?:  \p{IsVowel}       \p{IsConsonant} )  )+ ) )

 (?= ( (?:  \p{IsConsonant}   \p{IsVowel}     )  )+ ) )

然后你計算所有那些,看看哪些是最長的。

但是,由於Python支持沒有(默認情況下/直接)支持regex中的屬性,就像我將它們用於我自己的程序一樣,這使得首先將字符串預處理成CV的更為重要。 。 否則你的模式看起來很難看。

暫無
暫無

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

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