2012-11-16 161 views
2

我试图用双引号替换所有单引号,但留下所有转义的单引号。有谁知道一个简单的方法来做到这一点与Python正则表达式?使用Python中的转义双引号替换转义的单引号

Input: 
"{ 'name': 'Skrillex', 'Genre':'Dubstep', 'Bass': 'Heavy', 'thoughts': 'this\'s ahmazing'}" 

output: 
"{ "name": "Skrillex", "Genre": "Dubstep", "Bass": "Heavy", "thoughts": "this\'s ahmazing"}" 
+0

无法完成,因为在原始的字符串他们都是一样的。 – pydsigner

+1

我的第一个问题是为什么你必须这样做?这是一个JSON字符串吗?你怎么得到的? – Keith

+0

是的,看起来像他插入特殊字符到数据库中,然后,将数据收回到json格式并发送到浏览器 –

回答

1

这是一种...奇怪的,但它可能工作。记得前言你的字符串r表示原始字符串,这样我们就可以删除反斜杠:

In [19]: s = r"{ 'name': 'Skrillex', 'Genre':'Dubstep', 'Bass': 'Heavy', 'thoughts': 'this\'s ahmazing'}" 
In [20]: s.replace("\\'", 'REPLACEMEOHYEAH').replace("'", '"').replace('REPLACEMEOHYEAH', "\\'") 
Out[20]: '{ "name": "Skrillex", "Genre":"Dubstep", "Bass": "Heavy", "thoughts": "this\'s ahmazing"}' 

REPLACEMEOHYEAH令牌替换,所以它需要是不会出现在您的实际的东西串。响应格式看起来像是可以更自然地解析的东西,但如果这不是一个选项,这应该工作。

+0

哎谢谢你的回答。这是我需要完成这个迂回方法。有一件事需要添加到该技巧,它会完成(我已经通过直接编辑添加它。) – LucianNovo

+0

@LucianNovo真棒,很高兴听到它!我不羡慕你的任务:) – RocketDonkey

0
  1. 更换所有的\”成魔字
  2. 全部更换“成“
  3. 替换所有魔法的话回\”
0

不管你在做什么,我m不确定regex是否真的是一个合适的工具如果你用正确的方式戳它,Python会自动处理引号:

In [1]: spam = r"{ 'name': 'Skrillex', 'Genre':'Dubstep', 'Bass': 'Heavy', 'thoughts': 'this\'s ahmazing'}" 

In [2]: import ast 

In [3]: ast.literal_eval(spam) 
Out[3]: 
{'Bass': 'Heavy', 
'Genre': 'Dubstep', 
'name': 'Skrillex', 
'thoughts': "this's ahmazing"}