问题如下:
我正在做一个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
使用我所拥有的代码,我找不到行中的所有字符,更不用说他们的位置了。
我想知道是否有人对如何最好地解决这个问题有任何想法。感谢。
答案 0 :(得分:1)
\x
是一个转义的x,这是一个无效的转义符。你的问题不是正则表达式,而是你的编码 - 你的line
不是文字字符串。试试print
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'
使其成为字符串文字。正则表达式应该像任何其他字符串一样处理文字。
答案 1 :(得分:0)
你可以找到字符\x
的所有索引(以及[0]和[len(t) - 1],然后遍历该列表并成对切片,如{ {1}}对于len(t)中的i