我最近开始使用 python/pyparsing 来处理一串十六进制值,但我遇到了麻烦:考虑这个字符串:
string = "10020304059917368584304025326"
我希望最终结果是这样的:
['10', '02', '03', ['04', '05', '9917365843'], ['04', '02', '5326']]
假设 04 是表示数据的标签(与 ASN.1 中的概念相同),而 05 是该数据的大小。我没有看到如何在 pyparsing 代码上使用 size 变量。我能做的最好的是:
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']]]
希望这对将来有所帮助。