Pyparsing для слогов слишком жадныйPython

Программы на Python
Ответить
Anonymous
 Pyparsing для слогов слишком жадный

Сообщение Anonymous »

Я пытаюсь проанализировать слоги с помощью pyparsing. Я работаю с языком, в котором есть шаблон слогов CV(C), поэтому каждый слог начинается с согласной. Однако мой парсер "съедает" согласную следующего слога.
import pyparsing as pp

C = pp.Regex(r'[bcdghklmnpqrstwxyz]')
V = pp.Regex(r'[aeiou]|y$')
syllable = pp.Group(C + V + pp.Opt(C))
word = pp.WordStart() + pp.OneOrMore(syllable) + pp.WordEnd()

Пример слов: ["банан", "бар", "ба"]
Результаты (result = word.parseString(w)):
banana -> Expected end of a word, found 'ana' (at char 3), (line:1, col:4)
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]

Что я хочу:
banana -> [['b', 'a'], ['n', 'a'], ['n', 'a']]
bar -> [['b', 'a', 'r']]
ba -> [['b', 'a']]

Я также пробовал syllable = pp.Group(C ^ V ^ pp.Opt(C)), но он просто зависает и никогда не завершает анализ.
Вот мой код для этих тестовых слов, который перехватывает исключение:
for w in "banana", "bar", "ba":
try:
result = word.parseString(w)
print(f"{w} -> {result}")
except pp.ParseException as e:
print(f"{w} -> {e}")


Подробнее здесь: https://stackoverflow.com/questions/798 ... too-greedy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»