Python заменить \ на

поэтому я не могу понять это... У меня есть строка, скажем, "anb" и я хочу, чтобы это стало "anb". Я пробовал все следующее, И ни один из них не работает;

>>> a
'anb'
>>> 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("","")
'anb'

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

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

Я что-то упускаю?

редактировать я понимаю, что это Escape-символ. То, что я пытаюсь сделать здесь, это превратить все n t etc. в n t etc. и замена, похоже, работает не так, как я себе представлял.

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

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

6 ответов


нет необходимости использовать для этого.

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

>>> 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!'

вы отсутствуете, это \ является 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

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

'\ '[0]

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

этот пример показывает разницу:

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

ваша исходная строка,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

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

или

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