0

问题如下:
我正在做一个 file.read(100) 并得到如下行:

line='1\x01\x1e17=00000000\x1e54=80300A00\x1e50=1\x1e56=2008080106010414\x1c\x1e247=CD\x1e6=In\x1e5=Boot\x1e180=0.445\x1e179=0.380\x1e55=AAA\x1e57=2008080100000000\x1e212=5000\x1e213=20000\x1e115=500\x1d\x1e29=5T2lqZHNAwg=\x01\x1e17=00000000'

我想要做的是在这一行中搜索十六进制数字并将它们转换为输出新操作的行。
所以基本上我想做:

t=re.findall(r'[\x80-\xff]', line) #Somehow get the positions    
for i in t: ord(i) #Something to this effect to replace all the hexadecimals it finds  

使用我为 t 提供的代码,我找不到行中的所有字符,更不用说它们的位置了。
我想知道是否有人对如何最好地解决这个问题有任何想法。谢谢。

4

2 回答 2

1

\x是一个转义的 x,这是一个无效的转义。您的问题不是正则表达式,而是您的编码-您line不是文字字符串。尝试printing line,您应该看到以下内容:

117=0000000054=80300A0050=156=2008080106010414247=CD6=In5=Boot180=0.445179=0.38055=AAA57=2008080100000000212=5000213=20000115=50029=5T2lqZHNAwg=17=00000000

很可能,这就是您所需要的。简而言之,十六进制值就像它们一样很好。

如果在此之后,您仍想获取十六进制值,则必须r在字符串的开头添加一个,如下所示:

line=r'1\x01\x1e17=00000000\x1e54=80300A00\x1e50=1\x1e56=2008080106010414\x1c\x1e247=CD\x1e6=In\x1e5=Boot\x1e180=0.445\x1e179=0.380\x1e55=AAA\x1e57=2008080100000000\x1e212=5000\x1e213=20000\x1e115=500\x1d\x1e29=5T2lqZHNAwg=\x01\x1e17=00000000'

使其成为字符串文字。正则表达式应该像任何其他字符串一样处理文字。

于 2012-11-29T21:37:38.713 回答
0

您可以找到字符的所有索引\x(以及 [0] 和 [len(t) - 1],然后遍历该列表并成对地切片,如ord(t[i:i+1])for i in len(t)

于 2012-11-29T21:20:41.157 回答