Как запретить пробелы между литералами в pyparsing?

#python #pyparsing

#python #pyparsing

Вопрос:

 grammar = Literal("from")   Literal(":")   Word(alphas)
  

Грамматика должна отклонять from : mary и только принимать from:mary , т.е. без каких-либо пробелов чередования. Как я могу обеспечить это в pyparsing? Спасибо

Ответ №1:

Можете ли вы использовать Combine ?

 grammar = Combine(Literal("from")   Literal(":")   Word(alphas))
  

Итак, тогда:

ОТРЕДАКТИРУЙТЕ в ответ на ваш комментарий.

Действительно?

 >>> grammar = pyparsing.Combine(Literal("from")   Literal(":")   Word(pyparsing.alphas))
>>> grammar.parseString('from : mary')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/pyparsing.py", line 1076, in parseString
    raise exc
pyparsing.ParseException: Expected ":" (at char 4), (line:1, col:5)
>>> grammar.parseString('from:mary')
(['from:mary'], {})
  

Комментарии:

1. Combine не выдает ParseException for from : mary . Я хочу, чтобы была выдана ошибка.

2. Также ознакомьтесь с leaveWhitespace методом подавления пропусков пробелов для определенных выражений. Вызовите этот метод для любого выражения, которое должно совпадать без пропусков пробелов, в вашем случае ‘:’ и слова, содержащего имя.