Ignorarea (dezactivarea) secvențelor de scăpare în Python cu șiruri de caractere brute

Afaceri

'...', "..."În Python, dacă prefixați acești literali de șir de caractere cu unul dintre următoarele caractere, valoarea va deveni un șir de caractere fără a extinde secvența de evacuare.

  • r
  • R

Util atunci când se utilizează șiruri de caractere care folosesc multe backslash-uri, cum ar fi căile de acces Windows și modelele de expresii regulate.
Aici sunt furnizate următoarele informații.

  • secvență de evacuare
  • Ignoră (dezactivează) secvențele de scăpare în șirurile de caractere brute
  • Conversia unui șir normal în șir brut:repr()
  • Rețineți bara inversă de la sfârșit.

secvență de evacuare

În Python, caracterele care nu pot fi reprezentate într-un șir de caractere normal (cum ar fi tabulatoarele și liniile noi) sunt descrise folosind secvențe de scăpare cu backslash-uri, similar cu limbajul C. Un exemplu de secvență de evacuare este prezentat mai jos.

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

Ignoră (dezactivează) secvențele de scăpare în șirurile de caractere brute

'...', "..."Dacă prefixați un astfel de literal de șir de caractere cu unul dintre următoarele, valoarea va deveni un șir de caractere fără a extinde secvența de evacuare. Un astfel de șir se numește șir brut.

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

Nu există un tip special numit tip de șir de caractere brut, este doar un tip de șir de caractere și este egal cu un șir de caractere normal cu o backslash reprezentat după cum urmează
\\

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

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

Într-un șir de caractere normal, o secvență de scăpare este considerată un caracter, dar într-un șir de caractere brut, backslash-urile sunt, de asemenea, considerate caractere. Lungimea șirului și a fiecărui caracter este după cum urmează.

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

Calea de acces Windows

Utilizarea șirului brut este utilă atunci când doriți să reprezentați o cale Windows sub forma unui șir.

Căile de acces din Windows sunt separate prin backslash-uri, astfel încât, dacă utilizați un șir normal, trebuie să scăpați calea de acces după cum urmează, dar dacă utilizați un șir brut, îl puteți scrie ca atare. Valorile sunt echivalente.
\\

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

Rețineți că un șir de caractere care se termină cu un număr impar de backslash-uri va duce la o eroare, așa cum este descris mai jos. În acest caz, este necesar să se scrie șirul ca un șir normal sau să se concateneze scriind doar sfârșitul șirului ca un șir normal.

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

Conversia șirurilor normale în șiruri brute cu repr()

Dacă doriți să convertiți un șir normal într-un șir brut, ignorând (dezactivând) secvențele de evacuare, puteți utiliza funcția încorporată repr().

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

Ceea ce returnează repr() este un șir de caractere care reprezintă un obiect, astfel încât acesta să aibă aceeași valoare ca atunci când a fost transmis la eval(), cu caracterele de început și de sfârșit.

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

Folosind slices, putem obține un șir echivalent cu șirul brut cu r atașat.

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

Rețineți bara inversă de la sfârșit.

Deoarece o backslash scapă caracterul de ghilimele imediat după ea, se va produce o eroare dacă există un număr impar de backslash-uri la sfârșitul șirului. Un număr par de backslash-uri este în regulă.

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

print(r'\\')
# \\

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