我有一个混合模式的字符,数字和十六进制字符,如下面的
\x20\x20\x20asdasd\x20\x20\x20asd\x20a12v\x20123123\x20\x20
使用正则表达式,我只想找出那些不是像asdasd,a12v那样的十六进制模式。 123123
E.x:not(\ [xX] \ d {2})
最终目标是将所有内容转换为十六进制格式。
\x20\x20\x20\x61\x73\x64\x61\x73\x64\x20\x20\x20\x61\x73\x64\x20\x61\x31\x32\x76\x20\x31\x32\x33\x31\x32\x33\x20\x20
怎么做?
感谢。
答案 0 :(得分:2)
您可以使用正则表达式进行此操作,但它可能非常容易出错,因为您需要使用正则表达式帐户来处理所有其他转义的可能性(例如,八进制),变得相当混乱。 :)
相反,首先尝试使用str.decode取消数据转义:
s = '\\x20\\x20\\x20asdasd\\x20\\x20\\x20asd\\x20a12v\\x20123123\\x20\\x20'
s = s.decode('string-escape')
s = ''.join('\\x%2x' % ord(c) for c in s)
最后一步,可能会更快。但我只是把它们放在一起作为一个例子。