我从网上的某个地方获得了这个代码,并将其保存在名为" doc"的变量中。
doc = """{"Grade": " \"B+\" "}"""
我想要doc打印
{"Grade": " B+ "}
这样我就可以使用ast.literal_eval()转换" doc"进入字典。
但是当我尝试时:
print(doc)
打印:
{"Grade": " "B+" "}
这不是我想要的,因为ast.literal_eval()不会起作用。
或者:
print(doc.replace("\"", ''))
给了我:
{Grade: B+ }
它完全删除了双引号,这不是我想要的,因为ast.literal_eval()给出了错误。
那我怎样才能改变" doc"这样
doc = """{"Grade": " \"B+\" "}"""
某些工作后,可以打印以下代码吗?
{"Grade": " B+ "}
提前致谢!
答案 0 :(得分:2)
我们可以使用re.sub()
将重复的双引号转换为一组双引号:
In [95]: doc = """{"Grade": " \"B+\" "}"""
In [96]: doc
Out[96]: '{"Grade": " "B+" "}'
In [98]: re.sub(r'["]\s*["]', '"', doc)
Out[98]: '{"Grade": "B+"}'
In [99]: import ast
In [101]: doc = re.sub(r'["]\s*["]', '"', doc)
In [102]: ast.literal_eval(doc)
Out[102]: {'Grade': 'B+'}
答案 1 :(得分:1)
好的,我假设你有一个{"key": "value"}
形式的字符串,其中的值可以包含不带引号的双引号。在您的示例中,我们为密钥Grade
和值"B+"
。
在这种情况下,您可以删除内部引号或正确引用它们,但是您应该拆分字符串以标识值部分
start, value, last = re.match(r'(\s*{\s*".*?"\s*:\s*")(.*)("\s*})', doc).groups()
然后,您可以轻松处理值部分中的引号:
fixed = value.replace('"', "") # remove quotes
或
fixed = value.replace('"', r'\"') # correctly quotes the double quotes
然后您可以成功写下:
d = ast.litteral_eval(start + fixed + last)
并获取{'Grade': ' B+ '}
或{'Grade': ' "B+" '}