Добавление обратных косых черт, не выходя [Python] [дубликат]

Этот вопрос уже имеет ответ здесь:

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

27
задан orokusaki 19 September 2012 в 03:13
поделиться

5 ответов

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

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

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

58
ответ дан 28 November 2019 в 04:03
поделиться
>>> '\\&' == '\&'
True
>>> len('\\&')
2
>>> print('\\&')
\&

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

8
ответ дан 28 November 2019 в 04:03
поделиться

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

>>> '\\'
'\\'
>>> print '\\'
\
>>> print '\\'.__repr__()
'\\'
23
ответ дан 28 November 2019 в 04:03
поделиться

Нет дополнительной обратной спинки, он просто отформатирован таким образом в интерактивной среде. Попробуйте:

print string

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

5
ответ дан 28 November 2019 в 04:03
поделиться

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

На самом деле лучше использовать \\ & или r '\ &' вместо '\ &'

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

В интерактивной консоли Python использует repr для отображения результата, поэтому вы видите двойное '\'. Если вы напечатаете свою строку или используете len (строка) , вы увидите, что на самом деле это только 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)» в таблице выше , попадают в категорию нераспознанных escape-последовательностей для строк, отличных от Unicode литералы.

18
ответ дан 28 November 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: