Добавление обратной косой черты без экранирования [Python]

Мне нужно сбежать & (амперсанд) символ в строке. Проблема в том, когда я string = string.replace ('&', '\&') результат '\\&', Добавлена ​​дополнительная обратная косая черта, чтобы избежать первоначальной обратной косой черты. Как мне удалить этот дополнительный обратный слеш?

6 ответов

Результат '\\&' только отображается - на самом деле строка \&:

>>> str = '&'
>>> new_str = str.replace('&', '\&')
>>> new_str
'\\&'
>>> print new_str
\&

Попробуйте это в оболочке.

Дополнительная обратная косая черта фактически не добавляется; это просто добавлено repr() функция, чтобы указать, что это буквальный обратный слеш. Интерпретатор Python использует repr() функция (которая вызывает __repr__() на объект), когда результат выражения должен быть напечатан:

>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'

Питон лечит \ в буквальной строке особым образом.
Это так, вы можете ввести '\n' означать перевод строки или '\t' означать вкладку
поскольку '\&' не означает ничего особенного для Python, вместо того, чтобы вызывать ошибку, лексический анализатор Python неявно добавляет дополнительный \ для тебя.

Действительно лучше использовать \\& или же r'\&' вместо '\&'

r здесь означает необработанную строку и означает, что \ не обрабатывается специально, если только он не находится перед символом кавычки в начале строки.

В интерактивной консоли Python использует repr чтобы отобразить результат, поэтому вы видите двойное "\". если ты print ваша строка или использование len(string) вы увидите, что это действительно только 2 персонажа

Некоторые примеры

>>> 'Here\'s a backslash: \\'
"Here's a backslash: \\"
>>> print 'Here\'s a backslash: \\'
Here's a backslash: \
>>> 'Here\'s a backslash: \\. Here\'s a double quote: ".'
'Here\'s a backslash: \\. Here\'s a double quote: ".'
>>> print 'Here\'s a backslash: \\. Here\'s a double quote: ".'
Here's a backslash: \. Here's a double quote ".

Чтобы уточнить то, что Питер делает в своем комментарии, смотрите эту ссылку

В отличие от стандарта C, все нераспознанные escape-последовательности остаются в строке без изменений, т. Е. Обратный слеш остается в строке. (Это поведение полезно при отладке: если escape-последовательность набрана неправильно, результирующий вывод легче распознать как прерванный.) Также важно отметить, что escape-последовательности, помеченные как "(только Unicode)" в таблице выше, попадают в категория нераспознанных выходов для строковых литералов не-Unicode.

>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&

Или другими словами: '\\&' содержит только одну обратную косую черту. Это просто экранировано в выводе оболочки Python для ясности.

Дополнительной обратной косой черты нет, просто она отформатирована в интерактивной среде. Пытаться:

print string

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

Печать списка также может вызвать эту проблему (я новичок в python, поэтому меня это тоже немного смутило):

>>>myList = ['\\']
>>>print myList
['\\']
>>>print ''.join(myList)
\ 

так же:

>>>myList = ['\&']
>>>print myList
['\\&']
>>>print ''.join(myList)
\&
Другие вопросы по тегам