Недавно я начал использовать python/pyparsing для обработки строки шестнадцатеричных значений, и у меня возникли проблемы с этим: рассмотрим эту строку:
string = "10020304059917368584304025326"
Я хочу, чтобы конечный результат был таким:
['10', '02', '03', ['04', '05', '9917365843'], ['04', '02', '5326']]
Предположим, что 04 — это тег, означающий данные (та же концепция, что и в ASN.1), а 05 — это размер этих данных. Я не понимаю, как использовать переменную размера в коде pyparsing. Лучшее, что я могу сделать, это:
byte = Word(hexnums, exact=2)
process = byte + byte + byte + Word(hexnums)
newstring = process.parseString(string)
print (newstring.dump())
Любая помощь будет принята с благодарностью.
PS: после помощи Hooked мой окончательный код:
from pyparsing import *
string = "10 02 03 04 05 99 17 36 58 43 04 02 53 26"
tag = Word(hexnums, exact=2)
size = Word(hexnums)
array = Group(tag + countedArray(size))
process = tag + tag + tag + ZeroOrMore(array)
newstring = process.parseString(string)
print (newstring.dump())
Что печатает:
['10', '02', '03', ['04', ['99', '17', '36', '58', '43']], ['04', ['53', '26']]]
Надеюсь, это поможет в будущем.