使用re在python上搜索十六进制数

使用re在python上搜索十六进制数,python,regex,Python,Regex,我正在处理一个html文本文件,并按如下方式输入十六进制数: example \xb7\xc7\xa0.... 我用这个密码试过了 t=re.findall (r'\\x[0-9a-fA-F]+', line) 但我只能得到一张空名单 请说明编写代码的正确方法。如果反斜杠在正则表达式中转义,则代码工作正常: t = re.findall (r'\\x[0-9a-fA-F]+', line) 结果: ['\\xb7', '\\xc7', '\\xa0'] ideone:如果反斜杠在正则

我正在处理一个html文本文件,并按如下方式输入十六进制数:

example    \xb7\xc7\xa0....
我用这个密码试过了

t=re.findall (r'\\x[0-9a-fA-F]+', line)
但我只能得到一张空名单


请说明编写代码的正确方法。

如果反斜杠在正则表达式中转义,则代码工作正常:

t = re.findall (r'\\x[0-9a-fA-F]+', line)
结果:

['\\xb7', '\\xc7', '\\xa0']
ideone:

如果反斜杠在正则表达式中转义,则代码工作正常:

t = re.findall (r'\\x[0-9a-fA-F]+', line)
结果:

['\\xb7', '\\xc7', '\\xa0']
ideone:

您的代码对我来说很好:

>>> line = r'\xb7\xc7\xa0....'
>>> t=re.findall (r'\\x[0-9a-fA-F]+', line)
>>> t
['\\xb7', '\\xc7', '\\xa0']

你的代码对我来说很好:

>>> line = r'\xb7\xc7\xa0....'
>>> t=re.findall (r'\\x[0-9a-fA-F]+', line)
>>> t
['\\xb7', '\\xc7', '\\xa0']

这对我来说很好。我想到了两种可能解释您的问题的情况:

  • 通过将字符串分配给变量
    来测试这一点,如下所示:

    line = 'example    \xb7\xc7\xa0....'
    
    在这种情况下,您需要避开反斜杠:

    line = 'example    \\xb7\\xc7\\xa0....'
    
  • 您正在以Python字符串的形式查看文件或行的内容,因此您看到的
    \xb7
    实际上是代码为B7十六进制的字符,而不是字符序列
    '\','\x',b',7'

  • 这对我来说很好。我想到了两种可能解释您的问题的情况:

  • 通过将字符串分配给变量
    来测试这一点,如下所示:

    line = 'example    \xb7\xc7\xa0....'
    
    在这种情况下,您需要避开反斜杠:

    line = 'example    \\xb7\\xc7\\xa0....'
    
  • 您正在以Python字符串的形式查看文件或行的内容,因此您看到的
    \xb7
    实际上是代码为B7十六进制的字符,而不是字符序列
    '\','\x',b',7'


  • 除非有我没注意到的编辑,否则OP会逃过它。Marcelo,你自己编辑了这篇文章来添加所需的逃过!谢谢你的方法对我来说是如此明确。再次谢谢你。@Jukkaziting:是的,你说得对。直到我对这个答案发表评论之后,我才意识到编辑的效果。除非有编辑我没有注意到,否则OP确实逃逸了。Marcelo,你自己编辑了这篇文章来添加所需的逃逸!谢谢你的方法对我来说是如此明确。再次谢谢你。@Jukkaziting:是的,你说得对。直到我对这个答案发表评论之后,我才意识到编辑的效果。马塞洛,你的编辑完全打破了这个问题的关键!原始版本只有一个反斜杠转义,这就是代码无法工作的原因。马克·拜尔斯的回答是正确的。@jukkaziting:检查原始版本的来源。它有两个反斜杠,之所以呈现为一个,是因为它没有被格式化为代码。@pyfunc:通过编辑问题,您犯了编写错误,在这种情况下,现在应该没有问题了:-)@Jukkaziting:嗯,OP可能键入了两次双反斜杠,目的是将其呈现为单个反斜杠。但是,鉴于OP是第一次发布,他们似乎更可能按原样粘贴代码,而没有意识到这会使他们的反斜杠增加一倍。坦率地说,它让我惊讶,它没有加倍;反斜杠在代码之外是特殊的吗?@GregHewgill:我明白了,你说得对。user1078785:您最初使用的代码有双重转义吗?Marcelo,您的编辑完全打破了这个问题的重点!原始版本只有一个反斜杠转义,这就是代码无法工作的原因。马克·拜尔斯的回答是正确的。@jukkaziting:检查原始版本的来源。它有两个反斜杠,之所以呈现为一个,是因为它没有被格式化为代码。@pyfunc:通过编辑问题,您犯了编写错误,在这种情况下,现在应该没有问题了:-)@Jukkaziting:嗯,OP可能键入了两次双反斜杠,目的是将其呈现为单个反斜杠。但是,鉴于OP是第一次发布,他们似乎更可能按原样粘贴代码,而没有意识到这会使他们的反斜杠增加一倍。坦率地说,它让我惊讶,它没有加倍;反斜杠在代码之外是特殊的吗?@GregHewgill:我明白了,你说得对。user1078785:您最初使用的代码有双重转义吗?谢谢。这个例子不能说明我的烦恼!非常感谢。这个例子不能说明我的烦恼!如果我这样写:t=re.findall(r'\x[0-9a-fA-F]+',行),则返回此类消息:sre_常量。错误:伪转义:'\\x'。这让我非常困惑。如果我这样写:t=re.findall(r'\x[0-9a-fA-F]+',第行)这种消息返回:sre_常量。错误:假转义:'\\x'。这让我很困惑。