从字符串中删除\ x转义的序列

时间:2018-12-11 12:53:33

标签: python python-2.x

我有一个十六进制字符串,我需要通过检查'\'是否为值来比较字符串,然后进行编码操作

value='\x1a\x01'


(Pdb) value.encode("hex")
'1a01'

但是当我这样检查时,它返回的是假

(Pdb) '\\' in value
False

1 个答案:

答案 0 :(得分:0)

您可以使用re.sub对x转义的序列进行编码。

首先,定义一个将捕获这些序列的正则表达式。

import re
pattern = re.compile(r'\\x[0-9a-fA-f]{2}')  # matches \x and two-digit hex value

请注意,\x必须进行转义,以便re编译器不会将其视为伪造的正则表达式转义序列。

现在定义一个将对匹配序列进行编码的函数。

def enc(match):
    return match.group(0).decode('string-escape').encode('hex')

编码时,我们需要先从'string-escape'解码,因为我们需要对输入字符串进行转义,以使\x..序列得到匹配。

现在对输入字符串的字符串转义版本执行替换,记住之后要解码输出(否则将\n之类的序列转义):

s = 'abc\x1a\x01def'
escaped = re.sub(pattern, enc, s.encode('string-escape'))
result = escaped.decode('string-escape')
print result
abc1a01def