Python如何删除\"来自字符串

时间:2016-06-01 07:10:31

标签: python

我从网上的某个地方获得了这个代码,并将其保存在名为" 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+  "}

提前致谢!

2 个答案:

答案 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+" '}