在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.为什么不,当然。”。他们走开了“}