结合正则表达式转换原始十六进制为JSON

问题描述 投票:0回答:2

正则表达式的新手。如何将多个这样的替换组合成一个正则表达式(即带有变量)的全部或一系列十六进制值?

s.replace(r'\xF1', '\xF1').replace(r'\xE1', '\xE1').replace(r'\xEA', '\xEA')

其中s是json.load要解析的字符串,例如

s = 'M : AU : \\xA0MDA:CON'

某些包含hex的片段会导致偶发错误:

{'M': 77, ' ': 32, ':': 58, 'A': 65, 'U': 85, '\\': 92, 'x': 120, '0': 48, 'D': 68, 'C': 67, 'O': 79, 'N': 78}

编辑

只想转换十六进制值,而不是所有转义字符,因为那些包含对json.loads也有问题的控制代码。

python json regex
2个回答
0
投票

由于您只想将转义的十六进制字符串转换为带二进制字符的文字字符串,您可以先使用encode方法将字符串转换为字节,然后使用decode方法将字节转换为字符串,并使用unicode-escape作为编码:

s = 'M : AU : \\xA0MDA:CON'
print(repr(s.encode().decode('unicode-escape')))

这输出:

'M : AU : \xa0MDA:CON'

0
投票

这对我们的日志似乎有用:

hex_decoder = lambda s: re.sub(r'\\x([0-9a-fA-F]+)',lambda c: chr(int(c.group(1),16)),s)

例如,给定

s = '{"AU" : "\\xA0MDACON\\nNext Line is\\xE1then"}'

然后:

hex_decoder(s)

correncly处理十六进制值并保留像\n这样的控制字符:

'{"AU" : "\xa0MDACON\\nNext Line isáthen"}'

有更清洁的解决方案吗?

© www.soinside.com 2019 - 2024. All rights reserved.