如何在pyparsing中指定令牌排序?

时间:2011-08-13 17:58:39

标签: python parsing pyparsing

假设我正在解析以下行:

The quick brown fox jumps over the lazy dog

我想将其解析为:

Words('The quick brown fox') + Literal('jumps') + Words('over the lazy dog')

我目前的pyparsing定义是:

some_words = OneOrMore(Word(alphas))
jumps      = Literal('jumps')
sentence   = some_words + jumps + some_words

正在发生的事情是some_words吞噬了'jumps',我收到了解析错误。如何将跳跃作为文字标记进行pyparsing lex?

1 个答案:

答案 0 :(得分:5)

你已经在思考解析器了,因为你明白OneOrMore(Word(alphas))继续前进,甚至读“跳”这个词。现在转过来,编写解析器,按照你的想法做事。

对于每个“跳跃”的单词,你怎么知道应该将它添加到主要的单词集中?你知道每个单词,因为它不是“跳跃”这个词。 Pyparsing不会自动执行此前瞻,但您可以使用NotAny(可以使用'〜'运算符缩写)自行完成:

JUMPS = Literal("jumps")
some_words = OneOrMore(~JUMPS + Word(alphas))

现在在匹配另一个单词之前,some_words首先验证该单词不是“跳跃”。