Подтвердить что ты не робот

Python Заменить\\с \

Так что я не могу понять это... У меня строка, "a\\nb", и я хочу, чтобы это стало "a\nb". Я пробовал все следующее, и никто не работает,

>>> a
'a\\nb'
>>> a.replace("\\","\")
  File "<stdin>", line 1
    a.replace("\\","\")
                      ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\")
  File "<stdin>", line 1
    a.replace("\\",r"\")
                       ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\\")
'a\\\\nb'
>>> a.replace("\\","\\")
'a\\nb'

Я действительно не понимаю, почему работает последний, потому что это прекрасно работает:

>>> a.replace("\\","%")
'a%nb'

Я здесь что-то не хватает?

EDIT Я понимаю, что\является escape-символом. То, что я пытаюсь сделать здесь, - это превратить все \\n \\t и т.д. В \n \t и т.д., И замена, похоже, не работает так, как я себе представлял.

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

Я хочу, чтобы строка a выглядела как строка b. Но замена не заменяет косые черты, как я думал, что это будет.

4b9b3361

Ответ 1

Нет причин использовать замену для этого, Python поставляется с включенными батареями.

У вас есть закодированная строка (с использованием кодировки string_escape), и вы хотите ее декодировать:

>>> s = r"Escaped\nNewline"
>>> print s
Escaped\nNewline
>>> s.decode('string_escape')
'Escaped\nNewline'
>>> print s.decode('string_escape')
Escaped
Newline
>>> "a\\nb".decode('string_escape')
'a\nb'

В Python 3:

>>> import codecs
>>> codecs.decode('\\n\\x21', 'unicode_escape')
'\n!'

Ответ 2

Вам не хватает, что\является escape-символом.

Посмотрите здесь: http://docs.python.org/reference/lexical_analysis.html на 2.4.1 "Escape Sequence"

Самое главное \n - символ новой строки. И \\- экранированный escape-символ: D

>>> a = 'a\\\\nb'
>>> a
'a\\\\nb'
>>> print a
a\\nb
>>> a.replace('\\\\', '\\')
'a\\nb'
>>> print a.replace('\\\\', '\\')
a\nb

Ответ 3

В строковых литералах Python обратная косая черта - это escape-символ. Это также верно, когда интерактивная подсказка показывает вам значение строки. Это даст вам буквальное представление строки. Используйте оператор print, чтобы увидеть, как выглядит строка.

В этом примере показана разница:

>>> '\\'
'\\'
>>> print '\\'
\

Ответ 4

В исходной строке a = 'a\\nb' на самом деле нет двух символов '\', первый - это побег для последнего. Если вы это сделаете, print a, вы увидите, что на самом деле у вас есть только один символ '\'.

>>> a = 'a\\nb'
>>> print a
a\nb

Если, однако, вы имеете в виду интерпретировать '\n' как символ новой строки, не выходя из косой черты, а затем:

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

Ответ 5

Это потому, что даже в "сырых" строках (= строки с r до стартовой цитаты) неэкранированный escape-символ не может быть последним символом в строке. Это должно работать вместо:

'\\ '[0]

Ответ 6

r'a\\nb'.replace('\\\\', '\\')

или

'a\nb'.replace('\n', '\\n')