Regex 将字符串拆分为辅音-元音序列

Regex 将字符串拆分为辅音-元音序列,regex,python-3.x,split,tokenize,Regex,Python 3.x,Split,Tokenize,我尝试按如下方式拆分字符串: 零个或多个辅音后跟零个或多个元音被视为标记 所有其他字符都作为标记 例如,“是的,oat是好的”被拆分为['ye'、's'、'、'oa'、't'、'i'、's'、'goo'、'd'] 尝试regexre.compile(r'[bcdefghjklmnpnpqrstuvwxyz]*[aeiou]*')。findall('yes,oat's good')给了我['yes',','oa','t','i','s','goo','d',''。为什么'yes'没有被分成'ye'

我尝试按如下方式拆分字符串:

  • 零个或多个辅音后跟零个或多个元音被视为标记
  • 所有其他字符都作为标记
  • 例如,
    “是的,oat是好的”
    被拆分为
    ['ye'、's'、'、'oa'、't'、'i'、's'、'goo'、'd']

    尝试regex
    re.compile(r'[bcdefghjklmnpnpqrstuvwxyz]*[aeiou]*')。findall('yes,oat's good')
    给了我
    ['yes',','oa','t','i','s','goo','d',''
    。为什么
    'yes'
    没有被分成
    'ye'
    's'

    然后,尝试
    re.compile(r'[bcdefghjklmnpnpqrstuvwxyz]*[aeiou]*|.).findall('yes,oat是好的')
    给了我同样的结果。为什么它不捕获
    '


    最后,有没有办法避免得到空字符串?

    您不应该将字母
    e
    作为辅音之一。除此之外,您应该使用交替模式来匹配所有其他字符作为标记。还应使用正向先行模式,以确保匹配零个或多个辅音,后跟零个或多个元音的模式至少匹配一个字母表:

    re.findall(r'[^a-z]|(?=[a-z])[bcdfghjklmnpqrstvwxyz]*[aeiou]*', 'yes, oat is good', re.I)
    
    这将返回:

    ['ye', 's', ',', ' ', 'oa', 't', ' ', 'i', 's', ' ', 'goo', 'd']
    

    您的正则表达式是正确的,只需删除[bcdefghjklmnpnpqrstuvwxyz]中的元音“e”和“u”,谢谢您发布解决方案。但我的第二个问题没有得到回答。为什么我使用的正则表达式未命中
    ,“