如何从单词中提取辅音/元音组?
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]+)
现在,每场比赛都会消耗前导元音(或辅音)(在前瞻之外)。
通过将所有模式放入前瞻部分,您可以 non-greedy 选择起始匹配点。改为使用一个显式和两个前瞻 V/C 序列:
r = re.compile('(?:([aeiouy]+)(?=([^aeiouy]+[aeiouy]+)))|(?:([^aeiouy]+)(?=([aeiouy]+[^aeiouy]+)))')
然后简单地连接组
map (lambda l:''.join(l), re.findall(r,"Helloworld"))
我想编写一个正则表达式,将单词拆分为 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]+)
现在,每场比赛都会消耗前导元音(或辅音)(在前瞻之外)。
通过将所有模式放入前瞻部分,您可以 non-greedy 选择起始匹配点。改为使用一个显式和两个前瞻 V/C 序列:
r = re.compile('(?:([aeiouy]+)(?=([^aeiouy]+[aeiouy]+)))|(?:([^aeiouy]+)(?=([aeiouy]+[^aeiouy]+)))')
然后简单地连接组
map (lambda l:''.join(l), re.findall(r,"Helloworld"))