Az escape szekvenciák figyelmen kívül hagyása (letiltása) Pythonban nyers karakterláncok esetén

Üzleti

'...', "..."Pythonban, ha ezeket a string literálokat a következő karakterek egyikével előlegezi meg, az érték az escape-szekvencia kibontása nélkül is string lesz.

  • r
  • R

Hasznos, ha olyan karakterláncokat kezelünk, amelyek sok backslashes karakterláncot használnak, mint például a Windows útvonalak és a reguláris kifejezések mintái.
A következő információk itt találhatók.

  • menekülési szekvencia
  • A nyers karakterláncokban lévő escape szekvenciák figyelmen kívül hagyása (letiltása)
  • Normál karakterlánc átalakítása nyers karakterlánccá:repr()
  • Figyelje meg a backslash-t a végén.

menekülési szekvencia

A Pythonban a normál karakterláncban nem ábrázolható karakterek (például tabulátorok és újsorok) a C nyelvhez hasonlóan backslashes escape szekvenciákkal írhatók le. Az alábbiakban egy escape-szekvencia példája látható.

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

A nyers karakterláncokban lévő escape szekvenciák figyelmen kívül hagyása (letiltása)

'...', "..."Ha egy ilyen string literál elé a következők valamelyikét illesztjük, az érték az escape-szekvencia kibontása nélkül is stringgé válik. Az ilyen karakterláncot nyers karakterláncnak nevezzük.

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

Nincs speciális, nyers karakterlánc típus, ez csak egy karakterlánc típus, és megegyezik egy normál karakterlánccal egy backslash-szel, a következőképpen ábrázolva
\\

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

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

Egy normál karakterláncban egy escape-sorozat egy karakternek számít, de egy nyers karakterláncban a backslashek is karaktereknek számítanak. A karakterlánc és az egyes karakterek hossza a következő.

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

Windows útvonal

A nyers karakterlánc használata akkor hasznos, ha egy Windows-útvonalat karakterláncként szeretne ábrázolni.

A Windows útvonalakat backslash-ek választják el, így ha normál karakterláncot használsz, akkor az alábbi módon kell az útvonalat elkerülnöd, de ha nyers karakterláncot használsz, akkor úgy írhatod, ahogy van. Az értékek egyenértékűek.
\\

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

Vegye figyelembe, hogy a páratlan számú backslashes karakterlánc hibát eredményez, ahogyan azt az alábbiakban leírtuk. Ebben az esetben a karakterláncot normál karakterláncként kell kiírni, vagy úgy kell összefűzni, hogy csak a karakterlánc végét írjuk ki normál karakterláncként.

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

Normál karakterláncok átalakítása nyers karakterláncokká repr() segítségével

Ha egy normál karakterláncot nyers karakterlánccá akarsz alakítani, figyelmen kívül hagyva (letiltva) az escape szekvenciákat, használhatod a beépített repr() függvényt.

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

A repr() egy objektumot reprezentáló karakterláncot ad vissza, amely ugyanazt az értéket tartalmazza, mint amikor az eval()-nek átadtuk, a vezető és az utolsó karakterekkel együtt.

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

A szeletek használatával a nyers karakterlánccal egyenértékű karakterláncot kapunk, amelyhez r-t csatoltunk.

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

Figyelje meg a backslash-t a végén.

Mivel a backslash elűzi a közvetlenül utána következő idézőjelet, hiba lép fel, ha a karakterlánc végén páratlan számú backslash van. A páros számú backslashes rendben van.

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

print(r'\\')
# \\

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