替换反斜杠后立即替换所有单引号

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

我对网页抓取很新,但我收集了大量数据,我使用file.write()写入文件,因为我不知道json.dumps()存在。我试图通过重新格式化数据来解决这个问题,以便它可以作为JSON加载回Python 3。

我需要能够替换字符串中的所有单引号(带双引号)而不替换反斜杠后立即出现的任何单引号。例如:

{'please':'don\'t touch friend\'s cat'}

会成为:

{"please":"don\'t touch friend\'s cat"}

关于重新格式化的任何其他建议也将不胜感激。

python json python-3.x
3个回答
2
投票

如果您将数据写入文件而不实际将其编码为JSON,则很可能将其“编码”为对象的repr(),这应该是简单数据类型的有效Python代码。您可以使用ast.literal_eval再次解析它:

In [3]: import ast

In [4]: ast.literal_eval(r"{'please':'don\'t touch friend\'s cat'}")
Out[4]: {'please': "don't touch friend's cat"}

1
投票

使用负面的lookbehind https://docs.python.org/3/library/re.html

import re

pattern = re.compile(r"(?<!\\)'")
print re.sub(pattern, '"', text)

0
投票

使用带有re模块的正则表达式可以非常轻松地完成此操作。如果您可以将数据作为字符串加载到内存中,那么您只需执行:

re.sub(r'(?<!\\)\'', '"', my_data_string)

它的作用是匹配所有不带反斜杠的单引号,并用双引号替换它们。你可以在这里找到更多关于它如何工作的血腥细节:https://docs.python.org/3/library/re.html

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