Python - экранирование двойных кавычек с помощью string.replace - PullRequest
8 голосов
/ 23 июня 2011

Как заменить "с \" в строке Python?

У меня есть строка с двойными кавычками:

s = 'a string with "double" quotes'

Я хочу избежать двойных кавычек с одной обратной косой чертой.

Выполнение следующего не совсем работает, оно выполняется с двумя обратными слешами:

s.replace('"', '\\"')
'a string with \\"double\\" quotes'

Печать вывода этой строки показывает, что я хочу. Но я не хочу просто печатать правильную строку, я хочу, чтобы она сохранялась в переменной. Может ли кто-нибудь помочь мне с правильным магическим регулярным выражением?

Ответы [ 4 ]

9 голосов
/ 24 июня 2011

Ваша первоначальная попытка работает просто отлично.Двойная обратная косая черта, которую вы видите, является просто способом отображения одиночных обратных косых черт, которые на самом деле находятся в строке.Смотрите также: __repr__()

>>> s = 'a string with "double" quotes'
>>> ss = s.replace('"', '\\"')
>>> len(s)
29
>>> len(ss)
31
8 голосов
/ 23 июня 2011

Строка является правильной.Но repr будет использовать обратную косую черту-себя, чтобы показать непечатаемые символы, и для согласованности (предполагается, что он формирует строковый литерал Python, который при оценке возвращает ту же строку, которая была введена для repr), также экранирует каждую обратную косую чертуэто происходит в строке.

Обратите внимание, что это довольно ограниченный алгоритм побега.В зависимости от того, для чего он вам нужен, вам, возможно, придется значительно его расширить (или есть готовое решение, например, подготовленные операторы при работе с базами данных)

1 голос
/ 27 марта 2017

Это сработало для меня.

s.replace('"', '\\"')
0 голосов
/ 24 июня 2011

одна обратная косая черта не видна, но обратная косая черта остается в строке. если вы проверите длину той же строки, вы сможете увидеть ответ. Кроме того, если вы замените новую строку снова двойными кавычками, вы получите исходную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...