以下のpyparsingで書かれた簡単なパーサーがあります。
import pyparsing as pp
Token = pp.Word(pp.alphas)("Token")
Modifier = pp.Word(pp.nums)("Modifier")
Random = pp.Group(pp.Keyword("?") + pp.OneOrMore(Modifier))("Random")
Phrase = pp.Group(Token + pp.OneOrMore(Modifier))("Phrase")
Collection = pp.Group(pp.delimitedList(Phrase ^ Random, ","))("Collection")
tree = Collection.parseString("hello 12 2, ? 1 2, word 4, ? 3 4, testing 5")
次に、これを試してみました。
>>> for name, item in tree[0].items():
print name, item
Phrase ['testing', '5']
Random ['?', '3', '4']
...しかし、何らかの理由で、ツリーの最後Phrase
のアイテムとアイテムのみが返されました。Random
どうすればそれらすべてを入手できますか?
(注:私もこれを試してみました:
>>> for item in tree[0]:
print item
['hello', '12', '2']
['?', '1', '2']
['word', '4']
['?', '3', '4']
['testing', '5']
...しかし、ご覧のとおり、必要なトークン名は返されません。私もやってみitem.name
ましたが、それらは常に空の文字列を返しました。)
pyparsingツリーを反復処理して、割り当てられた名前とともにすべてのアイテムを順番に取得するにはどうすればよいですか?