Karena \
memulai urutan escape hanya jika merupakan urutan escape yang valid.
>>> '\n'
'\n'
>>> r'\n'
'\\n'
>>> print '\n'
>>> print r'\n'
\n
>>> '\s'
'\\s'
>>> r'\s'
'\\s'
>>> print '\s'
\s
>>> print r'\s'
\s
Kecuali ada awalan 'r' atau 'R', urutan escape dalam string diinterpretasikan menurut aturan yang serupa dengan yang digunakan oleh Standar C. Urutan escape yang dikenali adalah:
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
Jangan pernah mengandalkan string mentah untuk literal jalur, karena string mentah memiliki cara kerja bagian dalam yang agak aneh , yang diketahui telah menggigit orang di pantat:
Ketika awalan "r" atau "R" ada, karakter setelah garis miring terbalik disertakan dalam string tanpa perubahan, dan semua garis miring terbalik tertinggal di string. Misalnya, string literal r"\n"
terdiri dari dua karakter: garis miring terbalik dan huruf kecil "n". Tanda kutip string bisa di-escape dengan garis miring terbalik, tetapi garis miring terbalik tetap ada di string; misalnya, r"\""
adalah string literal valid yang terdiri dari dua karakter: garis miring terbalik dan tanda kutip ganda; r"\"
bukan literal string yang valid (bahkan string mentah tidak boleh diakhiri dengan garis miring terbalik dalam jumlah ganjil). Secara khusus, string mentah tidak boleh diakhiri dengan satu garis miring terbalik (karena garis miring terbalik akan keluar dari karakter kutipan berikut). Perhatikan juga bahwa satu garis miring terbalik diikuti oleh baris baru diartikan sebagai dua karakter sebagai bagian dari string,
Untuk mengilustrasikan poin terakhir ini dengan lebih baik:
>>> 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'
) juga direpresentasikan sebagai'\\s'
, karena'\s'
tidak dikenali sebagai escape sequence.'r' berarti yang berikut ini adalah "string mentah", yaitu. karakter garis miring terbalik diperlakukan secara harfiah alih-alih menandakan perlakuan khusus dari karakter berikut.
http://docs.python.org/reference/lexical_analysis.html#literals
begitu
'\n'
juga satu baris barudan
r'\n'
dua karakter - garis miring terbalik dan huruf 'n'cara lain untuk menulisnya adalah
'\\n'
karena garis miring terbalik pertama lolos dari yang keduacara yang setara untuk menulis ini
print (re.sub(r'(\b\w+)(\s+\1\b)+', r'\1', 'hello there there'))
adalah
print (re.sub('(\\b\\w+)(\\s+\\1\\b)+', '\\1', 'hello there there'))
Karena cara Python memperlakukan karakter yang bukan karakter escape yang valid, tidak semua garis miring terbalik ganda itu diperlukan - misalnya,
'\s'=='\\s'
namun hal yang sama tidak berlaku untuk'\b'
dan'\\b'
. Preferensi saya adalah eksplisit dan menggandakan semua garis miring terbalik.sumber
Tidak semua urutan yang melibatkan garis miring terbalik adalah urutan pelarian.
\t
dan\f
, misalnya, tetapi\s
tidak. Dalam literal string non-mentah, apa pun\
yang bukan bagian dari urutan pelolosan hanya dipandang sebagai\
:>>> "\s" '\\s' >>> "\t" '\t'
\b
adalah sebuah escape sequence, jadi contoh 3 gagal. (Dan ya, beberapa orang menganggap perilaku ini agak tidak menguntungkan.)sumber
r
masih lolos dari beberapa urutan ketika mereka muncul di akhir string:r"\"
tidak valid, untuk melakukan itu Anda harus melakukannya"\\"
. Jika Anda melakukannyar"\\"
, Anda mendapatkan\\
("\\\\"
string) yang dicetak . Hati-hati dengan itu.Coba itu:
a = '\'' ' a = r'\'' \' a = "\'" ' a = r"\'" \'
sumber
Lihat contoh di bawah ini:
print r"123\n123" #outputs>>> 123\n123 print "123\n123" #outputs>>> 123 123
sumber