Разделение строки на последовательности согласных гласных - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь разбить строку следующим образом:

  1. Ноль или более согласных, за которыми следует ноль или более гласных, считаются токеном.
  2. Все остальные символы принимаются

Например, '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') дает мне тот же результат. Почему он не захватывает ',' и ' '?

Наконец, есть ли способ избежать получения пустых строк?

1 Ответ

1 голос
/ 12 октября 2019

Вы не должны включать букву e в качестве одного из согласных. Кроме того, вы должны использовать шаблон чередования, чтобы сопоставить все другие символы в качестве токена. Также используйте шаблон положительного прогнозирования, чтобы убедиться, что шаблон, который соответствует нулю или нескольким согласным, за которыми следует ноль или более гласных, соответствует хотя бы одному алфавиту:

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

Возвращает:

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