2012-11-16 195 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"}