【发布时间】:2015-09-13 23:46:44
【问题描述】:
我有一个看起来像这样的字符串
'\x00\x03\x10B\x00\x0e12102 G1103543\x10T\x07\x21'
我已经能够将我想要的数据“12102 G1103543”与这个匹配。
re.findall('\x10\x42(.*)\x10\x54', data)
哪个会输出这个
'\x00\x0e12102 G1103543'
我遇到的问题是 \x10\x54 并不总是在我想要的数据的末尾。但是我注意到的是,前两个十六进制数字对应于数据长度的长度。 IE。 \x00\x0e = 14 所以数据长度为 14char 长。
有没有更好的方法来做到这一点,比如匹配第一部分然后删除接下来的 14 个字符?我还应该说,长度会随着我想要匹配几件事而有所不同。
还有一种方法可以以所有十六进制输出字符串,这样我在 python shell IE 中工作时更容易阅读。 \x10B == \x10\x42
谢谢!
编辑:我设法想出了这个可行的解决方案。
newdata = re.findall('\x10\x42(.*)', data)
newdata[0][2:int(newdata[0][0:2].encode('hex'))]
【问题讨论】:
-
如果您可以安全地确定存储长度的位置,您应该从那里删除下一个数字
-
应该知道我需要更加努力。
-
将此作为一个过程执行,而不是从上方查看整个文件。您的循环应该是:1. 读取 2 个字节,2. 将它们解释为以下消息的长度,3. 读取那么多字节,4. 转到 1