Добавление обратной косой черты без экранирования [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)
\&