Python中的正则表达式来查找遵循模式的单词:元音、辅音、元音、辅音
尝试学习Python中的正则表达式以查找具有连续元音-辅音或辅音-元音组合的单词。在正则表达式中我将如何执行此操作?如果不能在正则表达式中完成,有没有一种有效的方法可以在Python中完成Python中的正则表达式来查找遵循模式的单词:元音、辅音、元音、辅音,python,regex,Python,Regex,尝试学习Python中的正则表达式以查找具有连续元音-辅音或辅音-元音组合的单词。在正则表达式中我将如何执行此操作?如果不能在正则表达式中完成,有没有一种有效的方法可以在Python中完成 ^(([aeiou][^aeiou])+|([^aeiou][aeiou])+)$ >>重新导入 >>>conce_re=re.compile(r'^([aeiou][^aeiou])+|([^aeiou][aeiou])+)$) >>>连续匹配(“捆”) >>>连续比赛(“保释”) >>> 我相信您应该
^(([aeiou][^aeiou])+|([^aeiou][aeiou])+)$
>>重新导入
>>>conce_re=re.compile(r'^([aeiou][^aeiou])+|([^aeiou][aeiou])+)$)
>>>连续匹配(“捆”)
>>>连续比赛(“保释”)
>>>
我相信您应该能够使用如下正则表达式:
r"([aeiou][bcdfghjklmnpqrstvwxz])+"
r"([aeiou]+[bcdfghjklmnpqrstvwxz]+)+"
匹配元音后接辅音和:
r"([bcdfghjklmnpqrstvwxz][aeiou])+"
用于匹配辅音后跟元音。作为参考,+表示它将匹配所能找到的该模式的最大重复。例如,将第一个模式应用于“ababab”将返回整个字符串,而不是单个出现的“ab”
如果要匹配一个或多个元音,后跟一个或多个辅音,可能会如下所示:
r"([aeiou][bcdfghjklmnpqrstvwxz])+"
r"([aeiou]+[bcdfghjklmnpqrstvwxz]+)+"
希望这能有所帮助。如果你把辅音有向图映射成单个辅音,那么最长的这个词就是解剖学上的10*VC字符串 如果你正确地映射了y,那么你就得到了完整的字符串,比如乙酰丙酮作为8*VC,下胚轴作为8*CV 如果你不需要字符串是完整的,你会得到一个9*CV模式的化学元素和一个9*VC模式的过度想象 如果允许连续的辅音或元音交替出现,则有许多10*个单词,如
(C+V+)
。包括腹腔镜子宫切开术和输尿管膀胱吻合术
主要技巧是首先将所有辅音映射到C,将所有元音映射到V,然后进行VC或CV匹配。对于Y,必须执行lookaheads和/或lookbehinds来确定它是否映射到该位置的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
及
然后你把这些数起来,看看哪一个最长
然而,由于Python支持不像我在自己的程序中使用的那样(默认/直接)支持正则表达式中的属性,这使得首先将字符串预处理为C和V更为重要。否则,您的模式看起来非常难看。在元音/辅音不均匀的情况下似乎不起作用<例如,代码>连续匹配('hiben')失败。-1:这匹配任何非元音而不是辅音。例如,
conce_re.match('ba7e')
返回一个匹配项。这实际上不起作用。我如何找到具有最连续元音-辅音匹配序列的单词?@Blair-如果你希望输入包含非单词,那么是的,最好对辅音进行硬编码。但是,如果您要与单个单词字符串进行匹配,那么就可以了。@Parseltongue:如果您想找到最匹配的单词,您应该在问题中说明……如何找到具有最连续元音-辅音匹配序列的单词?找到匹配项时,请存储匹配长度。为了将来的参考,你应该尽量不要在提问后改变这个问题。@Katrielex-虽然不幸的是,最初的答案通常有助于澄清海报上的问题,因此问题会有所发展和变化。在解析问题上,我已经让它来回地执行了几十个步骤-参见
(?= ( (?: \p{IsConsonant} \p{IsVowel} ) )+ ) )