Python 将单引号(';)替换为双引号(";),撇号除外
我有一个包含无效json的数据集,请参见下面的代码段:Python 将单引号(';)替换为双引号(";),撇号除外,python,json,regex,replace,Python,Json,Regex,Replace,我有一个包含无效json的数据集,请参见下面的代码段: {'id': 613, 'name': "new year's eve"} 我想替换所有单引号,除了:newyear's中的撇号。因此,上面的字符串应生成有效的json,如: {"id": 613, "name": "new year's eve"} 我在Python中尝试了一个简单的字符串替换:string.replace(“'”,“\”),但这也改变了撇号,导致: {"id": 613, "name": "new year"s ev
{'id': 613, 'name': "new year's eve"}
我想替换所有单引号,除了:newyear's中的撇号。因此,上面的字符串应生成有效的json,如:
{"id": 613, "name": "new year's eve"}
我在Python中尝试了一个简单的字符串替换:string.replace(“'”,“\”),但这也改变了撇号,导致:
{"id": 613, "name": "new year"s eve"}
有没有一种方法可以用正则表达式解决这个问题,比如replace all',除非用“”封装?您可以试试
'(\w+)'\s*:
看。
在Python中:
import json, re
string = """{'id': 613, 'name': "new year's eve"}"""
rx = re.compile(r"""'(\w+)'\s*:""")
string = rx.sub(r'"\1":', string)
d = json.loads(string)
print(d)
这就产生了
{'id': 613, 'name': "new year's eve"}
更好的是:这个字符串首先来自哪里?您可以使用
ast
模块
Ex:
import ast
s = """{'id': 613, 'name': "new year's eve"}"""
d = ast.literal_eval(s)
print(d)
我以前尝试过该解决方案,但它在我的情况下不起作用,因为它会导致无效的json。
{'id':613,'name':“这是我字符串'foo':'bar'的内容。}
感谢您的回复。这不起作用,因为它匹配引号之间的文本。我只想将“to”改为“except when”,用在像:year's这样的作品中。@Cid:我很清楚它并不完美。@user3190748:是的,它是完美的。打印的d
已经阅读了解析过的词典。如果你想看到字符串已经更改,可以在之前打印出来。”更好的是:这个字符串从何而来?“这个问题应该得到回答。你不应该在收到一个无效的JSON后就修复它。非常感谢!这正是我需要的。我是Python新手,还不知道这个函数。欢迎:)