我正在尝试按如下方式拆分字符串:
- 零个或多个辅音后跟零个或多个元音被视为 token 。
- 所有其他字符均被视为 token 。
例如,'yes, oat is good'
被拆分为 ['ye', 's', ',', ' ', 'oa', 't', ' '、'i'、's'、' '、'goo'、'd']
。
尝试正则表达式 re.compile(r'[bcdefghjklmnpqrstuvwxyz]*[aeiou]*').findall('yes, oat is good')
给我 ['yes', ' '、''、'oa'、't'、''、'i'、's'、''、'goo'、'd'、'']
。为什么'yes'
不分为'ye'
和's'
?
然后,尝试 re.compile(r'[bcdefghjklmnpqrstuvwxyz]*[aeiou]*|.').findall('yes, oat is good')
给出了相同的结果。为什么它不捕获 ','
和 ' '
?
最后,有没有办法避免得到空字符串?
最佳答案
您不应将字母 e
作为辅音之一。除此之外,您应该使用交替模式来匹配所有其他字符作为标记。还可以使用正向先行模式来确保匹配零个或多个辅音后跟零个或多个元音的模式至少匹配一个字母表:
re.findall(r'[^a-z]|(?=[a-z])[bcdfghjklmnpqrstvwxyz]*[aeiou]*', 'yes, oat is good', re.I)
这将返回:
['ye', 's', ',', ' ', 'oa', 't', ' ', 'i', 's', ' ', 'goo', 'd']
关于regex - 将字符串拆分为辅音-元音序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58355579/