2012-11-16 4 views
2

Я пытаюсь заменить все одинарные кавычки двойными кавычками, но оставляю за собой все изолированные одиночные кавычки. Кто-нибудь знает простой способ сделать это с помощью python regexs?Замена пропущенной одиночной кавычки с экранированной двойной кавычкой в ​​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

Все, что вы делаете, я м не уверен, регулярное выражение действительно подходящий инструмент 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"} 
Смежные вопросы