我是使用 pyparsing 的新手,但我找不到如何解决这个非常简单的问题。我(目前)有一个简单的语法,但是我找不到根据我在语法中定义的类型来区分解析结果的方法。
也许用一个例子来解释它会更容易。假设这个元素:
elem = foo | bar
当我调用时:
elem.parseString("...")
假设字符串与我的语法匹配,我如何区分它是否与“foo”或“bar”匹配?我得到一个 ParseResults 的实例对象,没有这样的元数据。
提前致谢。
您可以为它们指定一个名称(使用 Literal 的复杂示例):
foo = Literal('foo').setResultsName('foo')
bar = Literal('bar').setResultsName('bar')
grammar = foo | bar
parsed = grammar.parseString('bar foo')
print parsed
# (['bar'], {'bar': [('bar', 0)]})
print parsed.asDict()
# {'bar': 'bar'}
Jon Clements 的回答是正确的,这里只是一些额外的代码来支持他的帖子,展示了如何使用getName()
来检测你得到的术语:
>>> from pyparsing import Literal, OneOrMore, Group
>>> bar = Literal('bar').setResultsName('BAR')
>>> foo = Literal('foo')('FOO') # using short form
>>> grammar = OneOrMore(Group(foo | bar))
>>> parsed = grammar.parseString('bar foo')
>>> for p in parsed: print p[0], p.getName()
...
bar BAR
foo FOO