Mengabaikan (melumpuhkan) urutan pelarian dalam Python dengan rentetan mentah

Perniagaan

...',"..."Dalam Python, jika anda mengawal huruf rentetan ini dengan salah satu aksara berikut, nilai akan menjadi rentetan tanpa mengembangkan jujukan melarikan diri.

  • r
  • R

Berguna apabila berurusan dengan rentetan yang menggunakan banyak garis miring ke belakang, seperti laluan Windows dan corak ungkapan biasa.
Maklumat berikut disediakan di sini.

  • urutan melarikan diri
  • Abaikan (lumpuhkan) urutan pelarian dalam rentetan mentah
  • Tukar rentetan biasa kepada rentetan mentah:repr()
  • Perhatikan garis miring ke belakang pada penghujungnya.

urutan melarikan diri

Dalam Python, aksara yang tidak boleh diwakili dalam rentetan biasa (seperti tab dan baris baharu) diterangkan menggunakan urutan melarikan diri dengan garis miring ke belakang, serupa dengan bahasa C. Contoh urutan melarikan diri ditunjukkan di bawah.

  • \t
  • \n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B

Abaikan (lumpuhkan) urutan pelarian dalam rentetan mentah

...',"..."Jika anda awalan rentetan literal sedemikian dengan salah satu daripada yang berikut, nilai akan menjadi rentetan tanpa mengembangkan jujukan melarikan diri. Rentetan sedemikian dipanggil rentetan mentah.

  • r
  • R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB

Tiada jenis khas yang dipanggil jenis rentetan mentah, ia hanyalah jenis rentetan dan sama dengan rentetan biasa dengan garis miring ke belakang diwakili seperti berikut
\\

print(type(rs))
# <class 'str'>

print(rs == 'a\\tb\\nA\\tB')
# True

Dalam rentetan biasa, urutan melarikan diri dianggap sebagai satu aksara, tetapi dalam rentetan mentah, sebatan ke belakang juga dikira sebagai aksara. Panjang rentetan dan setiap aksara adalah seperti berikut.

print(len(s))
# 7

print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']

print(len(rs))
# 10

print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']

Laluan Windows

Menggunakan rentetan mentah berguna apabila anda ingin mewakili laluan Windows sebagai rentetan.

Laluan Windows dipisahkan oleh garis miring ke belakang, jadi jika anda menggunakan rentetan biasa, anda perlu melarikan diri dari laluan seperti berikut, tetapi jika anda menggunakan rentetan mentah, anda boleh menulisnya sebagaimana adanya. Nilai adalah setara.
\\

path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True

Sila ambil perhatian bahawa rentetan yang berakhir dengan bilangan garis miring ke belakang yang ganjil akan mengakibatkan ralat, seperti yang diterangkan di bawah. Dalam kes ini, adalah perlu untuk menulis rentetan sebagai rentetan biasa, atau menggabungkannya dengan menulis hanya hujung rentetan sebagai rentetan biasa.

path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True

Tukar rentetan biasa kepada rentetan mentah dengan repr()

Jika anda ingin menukar rentetan biasa kepada rentetan mentah yang mengabaikan (melumpuhkan) urutan pelarian, anda boleh menggunakan fungsi terbina dalam repr().

s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'

Apa yang dipulangkan oleh repr() ialah rentetan yang mewakili objek supaya ia mempunyai nilai yang sama seperti semasa ia dihantar ke eval(), dengan aksara pendahulu dan di belakang.

print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]

Dengan menggunakan kepingan, kita boleh mendapatkan rentetan yang setara dengan rentetan mentah dengan r dilekatkan.

s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB

print(s_r2 == rs)
# True

print(r'\t' == repr('\t')[1:-1])
# True

Perhatikan garis miring ke belakang pada penghujungnya.

Memandangkan garis miring ke belakang melarikan diri daripada aksara yang memetik serta-merta selepas itu, ralat akan berlaku jika terdapat bilangan garisan belakang yang ganjil pada penghujung rentetan. Sebilangan garis miring ke belakang adalah OK.

# print(r'\')
# SyntaxError: EOL while scanning string literal

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal
Copied title and URL