Python: заменить апостроф (') на обратный слэш+апостроф (\')

5065584

Нужно заменить (') на (\') в Python. Я пытался это сделать так:

s="nicola 'pitersky'"
print s
s.replace("\'","\\\'")
print s

Вывод

nicola 'pitersky'
nicola 'pitersky'

Нет замены потому, что метод replace не находит апостроф. Ни экранированный, ни неэкранированный. Если пытаться заменить на пустую строку, тоже ничего не происходит.
Это делалось в Pycharm с 64bit Python на Windows 7.

stm5872449

In [1]: print "nicola 'pitersky'".replace("'", "\\'")
nicola \'pitersky\'

PITACHOK

>>> a = "a'b"
>>> b = a.replace("'", "\\'")
>>> print b
a\'b

5065584

Проблема решилась

khachin

Нет замены потому, что метод replace не находит апостроф. Ни экранированный, ни неэкранированный.
Причина в том, что используются разные знаки.
Один вариант тебе выше показали:
b = a.replace("'", "\\'")
Учти, что метод replace не производит замен внутри строковой переменной, а возвращает новую строку, поэтому для сохранения результата необходимо присваивание.
Второй вариант (исправление твоего):
>>> a = "don't panic"
>>> b = a.replace('\'', '\\\'')
>>> b
"don\\'t panic"
>>> print b
don\'t panic
Как видишь, применение знаков одного "стиля" исправило ситуацию. Правило применимо и для апострофа, и для кавычек.
>>> '\''=="'"
True
>>> "\""=='"'
True

Третий вариант — подготовка всей строки к эскейпингу:
b = a.encode('string_escape')
В такой ситуации не только апостроф, но и всё содержимое переменной, подлежащее экранированию, будет обработано должным образом.

apl13

Как?
Оставить комментарий
Имя или ник:
Комментарий: