7

私はpyparsingを初めて使用していますが、この非常に簡単な問題を解決する方法が見つかりません。私は(今のところ)単純な文法を持っていますが、文法で定義した型に従って解析の結果を区別する方法を見つけることができません。

例を挙げて説明した方がわかりやすいかもしれません。この要素を仮定すると:

elem = foo | bar

私が呼び出すとき:

elem.parseString("...")

文字列が私の文法に一致すると仮定すると、それが「foo」と一致するか「bar」と一致するかをどのように区別できますか? そのようなメタデータを持たない ParseResults のインスタンス オブジェクトを取得します。

前もって感謝します。

4

2 に答える 2

4

それらに名前を割り当てることができます (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'}
于 2012-10-26T09:30:22.337 に答える
4

getName()Jon Clements の答えは正しいものです。これは、彼の投稿をサポートする追加のコードであり、どの用語を取得したかを検出する方法を示しています。

>>> 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
于 2012-10-29T15:57:39.893 に答える