使用re在Python中搜索十六进制数
我正在处理一个html文本文件,并且想要找出里面的十六进制数字,具体方法如下:
example \xb7\xc7\xa0....
我尝试了这段代码:
t=re.findall (r'\\x[0-9a-fA-F]+', line)
但是我得到的结果只是一个空列表。
请告诉我正确的代码写法。
3 个回答
0
你的代码在我这儿运行得很好:
>>> line = r'\xb7\xc7\xa0....'
>>> t=re.findall (r'\\x[0-9a-fA-F]+', line)
>>> t
['\\xb7', '\\xc7', '\\xa0']
2
对我来说,这个没问题。我想到两种情况,可能能解释你的问题:
你是通过把字符串赋值给一个变量
line
来测试的,像这样:line = 'example \xb7\xc7\xa0....'
在这种情况下,你需要对反斜杠进行转义,也就是在它前面加一个反斜杠:
line = 'example \\xb7\\xc7\\xa0....'
- 你在查看文件或行的内容时,是以 Python 字符串的方式来看,所以你看到的
\xb7
实际上是一个字符,它的代码是十六进制的 B7,而不是字符序列'\', '\x', 'b', '7'
。
2
你的代码如果在正则表达式里面把反斜杠处理得当,就能正常工作:
t = re.findall (r'\\x[0-9a-fA-F]+', line)
结果:
['\\xb7', '\\xc7', '\\xa0']
可以在这个链接查看: http://ideone.com/MPO5j
如果代码还是不工作,可能是因为你的字符串里面有一些特殊的二进制字符。你可以试试下面这种方法:
t = re.findall (r'[\x80-\xff]', line)
可以在这个链接查看: http://ideone.com/ChIsh