Ignorovanie (vypnutie) escape sekvencií v jazyku Python so surovými reťazcami

obchodné

'...', "..."Ak v jazyku Python prefixujete tieto reťazcové literály jedným z nasledujúcich znakov, hodnota sa stane reťazcom bez rozbalenia escape sekvencie.

  • r
  • R

Užitočné pri práci s reťazcami, ktoré používajú veľa spätných lomiek, ako sú cesty systému Windows a vzory regulárnych výrazov.
Tu sú uvedené tieto informácie.

  • escape sekvencia
  • Ignorovanie (zakázanie) escape sekvencií v surových reťazcoch
  • Previesť normálny reťazec na nespracovaný reťazec:repr()
  • Všimnite si spätné lomítko na konci.

escape sekvencia

V jazyku Python sa znaky, ktoré nie je možné reprezentovať v normálnom reťazci (napríklad tabulátory a nové riadky), opisujú pomocou escape sekvencií so spätnými lomkami, podobne ako v jazyku C. Príklad escape sekvencie je uvedený nižšie.

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

Ignorovanie (zakázanie) escape sekvencií v surových reťazcoch

'...', "..."Ak takýto reťazcový literál prefixujete jedným z nasledujúcich znakov, hodnota sa stane reťazcom bez rozbalenia escape sekvencie. Takýto reťazec sa nazýva surový reťazec.

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

Neexistuje žiadny špeciálny typ s názvom raw string type, je to len typ reťazca a rovná sa normálnemu reťazcu so spätným lomítkom, ktorý je reprezentovaný takto
\\

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

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

V normálnom reťazci sa escape sekvencia považuje za jeden znak, ale v nespracovanom reťazci sa spätné lomítka tiež počítajú ako znaky. Dĺžka reťazca a jednotlivých znakov je nasledovná.

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

Cesta k systému Windows

Použitie surového reťazca je užitočné, keď chcete reprezentovať cestu systému Windows ako reťazec.

Cesty v systéme Windows sa oddeľujú spätnými lomkami, takže ak použijete normálny reťazec, musíte cestu takto escapovať, ale ak použijete nespracovaný reťazec, môžete ho zapísať tak, ako je. Hodnoty sú ekvivalentné.
\\

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

Všimnite si, že reťazec končiaci nepárnym počtom spätných lomiek bude mať za následok chybu, ako je opísané nižšie. V tomto prípade je potrebné zapísať reťazec ako normálny reťazec alebo ho spojiť tak, že zapíšete iba koniec reťazca ako normálny reťazec.

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

Prevod normálnych reťazcov na nespracované reťazce pomocou funkcie repr()

Ak chcete previesť normálny reťazec na surový reťazec, pričom ignorujete (vypnete) escape sekvencie, môžete použiť vstavanú funkciu repr().

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

Funkcia repr() vráti reťazec reprezentujúci objekt tak, aby mal rovnakú hodnotu, ako keď bol odovzdaný funkcii eval(), s úvodnými a koncovými znakmi.

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

Pomocou rezov môžeme získať reťazec ekvivalentný nespracovanému reťazcu s pripojeným r.

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

Všimnite si spätné lomítko na konci.

Keďže spätné lomítko uniká znaku úvodzoviek bezprostredne za ním, ak je na konci reťazca nepárny počet spätných lomítok, dôjde k chybe. Párny počet spätných lomiek je v poriadku.

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

print(r'\\')
# \\

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