如何在Python中处理JSON文件中的正则表达式字符串

4 投票
3 回答
15799 浏览
提问于 2025-04-17 22:55

我想把一些正则表达式的字符串存储在一个json文件里,然后用Python来解析这个json文件。不过,正则表达式中的反斜杠在json中会被当作无效的字符。那么我该怎么做呢?

{
    "key" : "^https://www\.google\.com/search?.+",
    "value" : "google"
}

如上所示,正则表达式中有些句点(?.+)会被当作正则表达式,而有些句点(.)则只是普通的句点。不过,这个json文件会被认为是无效的。那么我该怎么做呢?

谢谢!

3 个回答

1

在生成JSON字符串时,你需要对反斜杠进行转义。无论你使用什么工具来生成JSON,通常这些工具都会自动处理这个问题。比如,使用Python的json模块:

>>> print json.dumps({'asdf': r'\s+'})
{"asdf": "\\s+"}

注意,输出中有两个反斜杠。当解析时,这两个反斜杠会变成一个反斜杠。

3

你需要对正则表达式中的反斜杠进行转义,然后再对字符串处理器中的反斜杠进行转义:

>>> s = """{
...     "key" : "^https://www\\\\.google\\\\.com/search?.+",
...     "value" : "google"
... }"""
>>> json.loads(s)
{'key': '^https://www\\.google\\.com/search?.+', 'value': 'google'}

如果你是反向操作,也就是从一个包含正则表达式字符串的Python字典转换到一个JSON对象,编码器会为你处理这些问题,但通常来说,使用原始字符串来写正则表达式是个好主意:

>>> s = """{
...     "key" : "^https://www\.google\.com/search?.+",
...     "value" : "google"
... }"""
>>> json.dumps(s)
'"{\\n    \\"key\\" : \\"^https://www\\\\.google\\\\.com/search?.+\\",\\n    \\"value\\" : \\"google\\"\\n}"'
1

每个反斜杠都要再加一个反斜杠。

        str=str.replace("\", "\\");

在使用json之前,把上面的代码加到你的代码里去!

       {
          "key": "^https://www\\.google\\.com/search?.+",
          "value": "google"
       }

这样是有效的!

希望这对你有帮助!

撰写回答