[英]How to insert backslash before a group with regex re.sub() in python
我有一个要转换为 JSON 的文本字符串,例如:
{text1: text2}
但是 text2 填充了非法字符:“{[]},因此无法正确解析。
我想通过在每个非法字符之前插入一个反斜杠来转义它,但我无法让它工作。
我能得到的最接近的是:
In [6]: re.sub('([\[\]\{\},"]{1})', r'\\\1', 'abc[def')
Out[6]: 'abc\\[def'
但这插入了两个反斜杠而不是一个......我无法让它插入一个。
不过,第二个问题可能出在我的 json.loads() 上? 这是一个例子:
In [41]: z
Out[41]: '{"abc": "sdfd\\[sfsdfdf"}'
In [42]: print(z)
Out[42]: {"abc": "sdfd\[sfsdfdf"}
从 z 和 print(z) 之间的区别可以看出,反斜杠已正确转义。 但是当我执行
json.loads(z)
我仍然在反斜杠上收到 Invalid escape 错误。
有任何想法吗?
您不需要为JSON转义括号。 JSON 需要一个 unicode 字符号或"
、 \
和宽空格。问题在于 Python 如何处理字符串中的转义序列。只需将其作为原始字符串提供给json.loads()
:
import json
json.loads(r'{"abc": "abc[def"}')
json.loads(r'{"abc": "ab\\cd\"e\tf"}')
json.loads('{"abc": "abc'+ re.escape('abc\def') +'def"}')
会打印:
{'abc': 'abc[def'}
{'abc': 'ab\cd"e\tf'}
{'abc': 'abcabc\defdef'}
所以你可以保留你的代码,但你需要转义正确的字符:
import json
import re
json.loads(r'{"abc": "' + re.sub(r'\\', r'\\\\', 'abc\def') + '"}')
{'abc': 'abc\def'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.