Tôi vừa mới bắt đầu sử dụng python/pyparsing để xử lý một chuỗi các giá trị hex và tôi đang gặp rắc rối với điều này: xem xét chuỗi này:Sử dụng thẻ như biến trong pyparsing
string = "10020304059917368584304025326"
Tôi muốn cuối cùng kết quả là:
['10', '02', '03', ['04', '05', '9917365843'], ['04', '02', '5326']]
Giả sử rằng 04 là thẻ có nghĩa là dữ liệu (cùng khái niệm như trong ASN.1) và 05 là kích thước của dữ liệu đó. Tôi không thấy cách sử dụng biến kích thước trên mã pyparsing. Điều tốt nhất mà tôi có thể làm là:
byte = Word(hexnums, exact=2)
process = byte + byte + byte + Word(hexnums)
newstring = process.parseString(string)
print (newstring.dump())
Mọi trợ giúp sẽ được đánh giá cao.
PS: Sau khi sự giúp đỡ của Hooked, mã cuối cùng của tôi là:
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())
nào in:
['10', '02', '03', ['04', ['99', '17', '36', '58', '43']], ['04', ['53', '26']]]
Hope this helps trong tương lai.
Cảm ơn bạn, đây chính xác là những gì tôi cần. – Kiji