在Python中使用正则表达式将转义的双引号替换为单引号

在Python中使用正则表达式将转义的双引号替换为单引号,python,json,regex,Python,Json,Regex,我试图将转义的双引号替换为键值对中的单引号 import re import json js = r'{"result":"{\"key\":\"How are you? \"Great!\" he said. \"Coffee ?\"\"},{\"key\":\" 2. \"Why not sure\". They walked away\"}"}' #print(js) data1 = json.loads(js) s = data1['result'] #print(s) # {"key"

我试图将转义的双引号替换为键值对中的单引号

import re
import json
js = r'{"result":"{\"key\":\"How are you? \"Great!\" he said. \"Coffee ?\"\"},{\"key\":\" 2. \"Why not sure\". They walked away\"}"}'
#print(js)
data1 = json.loads(js)
s = data1['result']
#print(s)
# {"key":"How are you? "Great!" he said. "Coffee ?""},{"key":" 2. "Why not, sure.". They walked away"}
p = re.compile(r"\"key\":\"(.*\"(.*)\".*)\"")
print(p.sub(r'\'\2\'',s))
# {\'Why not, sure.\'}
json_string = "[{0}]".format(p.sub(r'\'\1\'',s))
data_list = json.loads(json_string)
通过上面的代码,我得到了一个输出“Coffee?”而不是整个字符串。我只想在值部分中替换双引号

字符串:“键”:“你好吗?”太棒了!他说,“咖啡?”


预期字符串:“key:“你好吗?太好了!”他说,“咖啡?”,

这个答案就在我们交换的评论之后:

import json
js = r'{"result":"{\"key\":\"How are you? \"Great!\" he said. \"Coffee ?\"\"},{\"key\":\" 2. \"Why not sure\". They walked away\"}"}'
data1 = json.loads(js)
s = data1['result']

good_characters = [":","{","}", ","]
result = "" 
for key, value in enumerate(s):
    if (value == "\"" and s[key-1] not in good_characters) and (value == "\"" and s[key+1] not in good_characters):
        result += '\''  
    else:
        result += value

print (result)
输出

{"key":"How are you? 'Great!' he said. 'Coffee ?'"},{"key":" 2. 'Why not sure'. They walked away"}

以下是我们交换的意见:

import json
js = r'{"result":"{\"key\":\"How are you? \"Great!\" he said. \"Coffee ?\"\"},{\"key\":\" 2. \"Why not sure\". They walked away\"}"}'
data1 = json.loads(js)
s = data1['result']

good_characters = [":","{","}", ","]
result = "" 
for key, value in enumerate(s):
    if (value == "\"" and s[key-1] not in good_characters) and (value == "\"" and s[key+1] not in good_characters):
        result += '\''  
    else:
        result += value

print (result)
输出

{"key":"How are you? 'Great!' he said. 'Coffee ?'"},{"key":" 2. 'Why not sure'. They walked away"}

如果键在整个字符串中是一致的,那么这将起作用

s = data1['result']
','.join([d[:8] + d[8:-2].replace('"',"'") + d[-2:] for d in s.split(',')])

如果键在整个字符串中是一致的,那么这将起作用

s = data1['result']
','.join([d[:8] + d[8:-2].replace('"',"'") + d[-2:] for d in s.split(',')])


正则表达式是一个严格的要求吗?看,这不是我们想要的。我需要将值部分中的双引号替换为单引号。是否可以查看(我想)输入中得到的完整json?这是不可能的。让我知道你想检查哪些方面?正则表达式是一个严格的要求吗?看。这不是你想要的。我需要将值部分中的双引号替换为单引号。是否可以查看(我想)输入中得到的完整json?这是不可能的。让我知道你想检查哪些方面?你得到的JSON如下:{“key”:“你好吗?”很好!他说。“咖啡?”},{“key”:“2.为什么不,当然。”。他们走开了“}Hi@NareshS这似乎与你问题中的代码不同。如果你分享一个与你的数据相同的例子,我可以找到一个可能的解决方案。参考第8行。谢谢你的帮助:)这解决了问题。谢谢我在优秀人物列表中添加了“,”一部分。很高兴它对你有用,也在我的答案中添加了变化。祝您有个美好的一天!你得到的JSON如下:{“key”:“你好吗?”很好!他说。“咖啡?”},{“key”:“2.为什么不,当然。”。他们走开了“}Hi@NareshS这似乎与你问题中的代码不同。如果你分享一个与你的数据相同的例子,我可以找到一个可能的解决方案。参考第8行。谢谢你的帮助:)这解决了问题。谢谢我在优秀人物列表中添加了“,”一部分。很高兴它对你有用,也在我的答案中添加了变化。祝您有个美好的一天!这是我打印时得到的值:{“键”:“你好吗?很好!”他说。“咖啡?”},{“键”:“2.为什么不,当然。”。他们走开了“}这是我打印时得到的值:{“键”:“你好吗?很好!”他说。“咖啡?”},{“键”:“2.为什么不,当然。”。他们走开了“}