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

标签 regex python-3.x split tokenize

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

  1. 零个或多个辅音后跟零个或多个元音被视为 token 。
  2. 所有其他字符均被视为 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/

相关文章:

regex - 在 Bash 中将 vim 替换为 sed/awk

python - python-3.3 的模拟工具

python-3.x - LU 分解速度与传统 Ax=b 的比较

jquery - 正则表达式:在单词后的下一个换行处拆分

php - 用于从 HTML 中提取所有链接和 anchor 文本的正则表达式

java - 正则表达式允许单个下划线和连字符不在开头或结尾

java - android java正则表达式匹配除一个字符外的所有字符

python-3.x - Flask - 中止时的自定义错误消息

python - 用双引号括起来时忽略逗号

python - 为什么 .readlines() 会生成单个字符的列表?