繁体   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