从字符串中删除 \x-escaped 序列
Remove \x-escaped sequences from a string
我有一个十六进制字符串,我需要通过检查“\”是否在值中来比较该字符串,然后执行和执行编码操作
value='\x1a\x01'
(Pdb) value.encode("hex")
'1a01'
然而,当我这样检查时,它返回 false
(Pdb) '\' in value
False
您可以使用 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
我有一个十六进制字符串,我需要通过检查“\”是否在值中来比较该字符串,然后执行和执行编码操作
value='\x1a\x01'
(Pdb) value.encode("hex")
'1a01'
然而,当我这样检查时,它返回 false
(Pdb) '\' in value
False
您可以使用 re.sub
.
首先,定义一个将捕获这些序列的正则表达式。
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