使用re在Python中搜索十六进制数

1 投票
3 回答
7261 浏览
提问于 2025-04-17 07:36

我正在处理一个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

对我来说,这个没问题。我想到两种情况,可能能解释你的问题:

  1. 你是通过把字符串赋值给一个变量 line 来测试的,像这样:

    line = 'example    \xb7\xc7\xa0....'
    

    在这种情况下,你需要对反斜杠进行转义,也就是在它前面加一个反斜杠:

    line = 'example    \\xb7\\xc7\\xa0....'
    
  2. 你在查看文件或行的内容时,是以 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

撰写回答