组合regex将原始十六进制转换为JSON

2024-09-28 19:01:18 发布

您现在位置:Python中文网/ 问答频道 /正文

不熟悉regex。如何将这样的多个replace合并到一个regex(即带有变量)中,覆盖所有或一系列十六进制值?你知道吗

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文件. 你知道吗


Tags: 文件字符串json编辑错误loadconreplace
2条回答

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

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

这将输出:

'M : AU : \xa0MDA:CON'

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

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)

正确地处理十六进制值并保留\n等控制字符:

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

有更清洁的解决方案吗?你知道吗

相关问题 更多 >