Мне непонятно, почему список результатов анализа иногда содержит элементы ParseResults вместо строк.
Например:
from pyparsing import *
text = "pfx01ABC"
# nested result name
pfx = Literal("pfx")("prefix")
combined = Combine(pfx + Word(alphanums))("combined")
combined.runTests(text)
res = combined.parseString(text)
print("type(res[0]):", type(res[0]))
print('type(res["combined"]):', type(res["combined"]))
# doubly nested result names
infix = Word(nums)("infix")
pfx = Combine(Literal("pfx") + infix)("prefix")
combined = Combine(pfx + Word(alphas))("combined")
combined.runTests(text)
res = combined.parseString(text)
print("type(res[0]):", type(res[0]))
print('type(res["combined"]):', type(res["combined"]))
print('type(res["combined"]["prefix"]):', type(res["combined"]["prefix"]))
# no nested result names
pfx = Literal("pfx") + Word(nums)
combined = Combine(pfx + Word(alphas))("combined")
combined.runTests(text)
res = combined.parseString(text)
print("type(res[0]):", type(res[0]))
print('type(res["combined"]):', type(res["combined"]))
производит
pfx01ABC
[['pfx01ABC']]
- combined: ['pfx01ABC']
- prefix: 'pfx'
type(res[0]): <class 'pyparsing.ParseResults'>
type(res["combined"]): <class 'pyparsing.ParseResults'>
pfx01ABC
[['pfx01ABC']]
- combined: ['pfx01ABC']
- prefix: ['pfx01']
- infix: '01'
type(res[0]): <class 'pyparsing.ParseResults'>
type(res["combined"]): <class 'pyparsing.ParseResults'>
type(res["combined"]["prefix"]): <class 'pyparsing.ParseResults'>
pfx01ABC
['pfx01ABC']
- combined: 'pfx01ABC'
type(res[0]): <class 'str'>
type(res["combined"]): <class 'str'>
Isэто потому, что имена результатов хранятся вместе с вложенным синтаксическим анализатором, а не глобально?
В случае дважды вложенных имен результатов результат имеет то же количество заключенных в квадратные скобки, что и в случае одного вложенного имени результата.Исходя из вышесказанного, я ожидаю, что это результат дополнительного набора квадратных скобок.Почему это не так?