Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将单引号(';)替换为双引号(";),撇号除外_Python_Json_Regex_Replace - Fatal编程技术网

Python 将单引号(';)替换为双引号(";),撇号除外

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

我有一个包含无效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 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新手,还不知道这个函数。欢迎:)