Perché \
iniziano le sequenze di escape solo quando sono sequenze di escape valide.
>>> '\n'
'\n'
>>> r'\n'
'\\n'
>>> print '\n'
>>> print r'\n'
\n
>>> '\s'
'\\s'
>>> r'\s'
'\\s'
>>> print '\s'
\s
>>> print r'\s'
\s
A meno che non sia presente un prefisso "r" o "R", le sequenze di escape nelle stringhe vengono interpretate secondo regole simili a quelle utilizzate dallo Standard C. Le sequenze di escape riconosciute sono:
Escape Sequence Meaning Notes
\newline Ignored
\\ Backslash (\)
\' Single quote (')
\" Double quote (")
\a ASCII Bell (BEL)
\b ASCII Backspace (BS)
\f ASCII Formfeed (FF)
\n ASCII Linefeed (LF)
\N{name} Character named name in the Unicode database (Unicode only)
\r ASCII Carriage Return (CR)
\t ASCII Horizontal Tab (TAB)
\uxxxx Character with 16-bit hex value xxxx (Unicode only)
\Uxxxxxxxx Character with 32-bit hex value xxxxxxxx (Unicode only)
\v ASCII Vertical Tab (VT)
\ooo Character with octal value ooo
\xhh Character with hex value hh
Non fare mai affidamento su stringhe grezze per i letterali del percorso, poiché le stringhe grezze hanno alcuni meccanismi interni piuttosto peculiari , noti per aver morso le persone nel culo:
Quando è presente un prefisso "r" o "R", un carattere che segue una barra rovesciata viene incluso nella stringa senza modifiche e tutte le barre rovesciate vengono lasciate nella stringa. Ad esempio, la stringa letterale è r"\n"
composta da due caratteri: una barra rovesciata e una "n" minuscola. Le virgolette di stringa possono essere precedute da una barra rovesciata, ma la barra rovesciata rimane nella stringa; ad esempio, r"\""
è una stringa letterale valida composta da due caratteri: una barra rovesciata e virgolette doppie; r"\"
non è una stringa letterale valida (anche una stringa non elaborata non può terminare con un numero dispari di barre rovesciate). In particolare, una stringa non elaborata non può terminare con una singola barra rovesciata (poiché la barra rovesciata sfuggirebbe al seguente carattere di virgolette). Nota anche che una singola barra rovesciata seguita da una nuova riga viene interpretata come quei due caratteri come parte della stringa,
Per illustrare meglio quest'ultimo punto:
>>> r'\'
SyntaxError: EOL while scanning string literal
>>> r'\''
"\\'"
>>> '\'
SyntaxError: EOL while scanning string literal
>>> '\''
"'"
>>>
>>> r'\\'
'\\\\'
>>> '\\'
'\\'
>>> print r'\\'
\\
>>> print r'\'
SyntaxError: EOL while scanning string literal
>>> print '\\'
\
'\s'
(liker'\s'
) è anche rappresentato come'\\s'
, poiché'\s'
non è una sequenza di escape riconosciuta.