如何从单词中提取辅音/元音组?

How to extract consonant / vowels groups from a word ?

我想编写一个正则表达式,将单词拆分为 cvc (consonant/vowel/consonant) 或 vcv 组。类似于 ngrams,但使用 voyels 和辅音。这是一个例子:

helloworld

会生成以下组:

hell
ello
llow
owo
world

我写了以下正则表达式:

(?=(([aeiouy]+|[^aeiouy]+){3}))

第一部分 ([aeiouy]+|[^aeiouy]+){3} 捕获 vcv 或 cvc 组,其余部分 (?=( )) 是正向先行断言。 它没有按预期工作:

hell
ello
llow
low //owo expected

如果单独使用lookahead,不会消耗字符,解析器会尝试字符串中的所有位置(换句话说,一次不能跳转超过一个字符)。

你可以这样解决问题:

(?=((?:[aeiou]+|[b-dfghj-np-tv-z]+){3}))(?:[aeiou]+|[b-dfghj-np-tv-z]+)

demo

现在,每场比赛都会消耗前导元音(或辅音)(在前瞻之外)。

通过将所有模式放入前瞻部分,您可以 non-greedy 选择起始匹配点。改为使用一个显式和两个前瞻 V/C 序列:

r = re.compile('(?:([aeiouy]+)(?=([^aeiouy]+[aeiouy]+)))|(?:([^aeiouy]+)(?=([aeiouy]+[^aeiouy]+)))')

然后简单地连接组

map (lambda l:''.join(l), re.findall(r,"Helloworld"))