Search code examples
pythonstringreplacedoubleslash

Python Replace \\ with \


So I can't seem to figure this out... I have a string say, "a\\nb" and I want this to become "a\nb". I've tried all the following and none seem to work;

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

I really don't understand why the last one works, because this works fine:

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

Is there something I'm missing here?

EDIT I understand that \ is an escape character. What I'm trying to do here is turn all \\n \\t etc. into \n \t etc. and replace doesn't seem to be working the way I imagined it would.

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

I want string a to look like string b. But replace isn't replacing slashes like I thought it would.


Solution

  • There's no need to use replace for this.

    What you have is a encoded string (using the string_escape encoding) and you want to decode it:

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

    In Python 3:

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