Ignorare (disabilitare) le sequenze di escape in Python con stringhe grezze

Attività commerciale

'...', "..."In Python, se si antepone a questi letterali di stringa uno dei seguenti caratteri, il valore diventerà una stringa senza espandere la sequenza di escape.

  • r
  • R

Utile quando si ha a che fare con stringhe che usano molti backslash, come i percorsi di Windows e i modelli di espressioni regolari.
Le seguenti informazioni sono fornite qui.

  • sequenza di fuga
  • Ignora (disabilita) le sequenze di escape nelle stringhe grezze
  • Convertire una stringa normale in una stringa grezza:repr()
  • Notate il backslash alla fine.

sequenza di fuga

In Python, i caratteri che non possono essere rappresentati in una normale stringa (come tabulazioni e newline) sono descritti usando sequenze di escape con backslash, in modo simile al linguaggio C. Un esempio di sequenza di escape è mostrato qui sotto.

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

Ignora (disabilita) le sequenze di escape nelle stringhe grezze

'...', "..."Se si mette come prefisso un letterale di stringa con uno dei seguenti, il valore diventerà una stringa senza espandere la sequenza di escape. Tale stringa è chiamata stringa grezza.

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

Non c'è un tipo speciale chiamato tipo di stringa grezza, è solo un tipo di stringa ed è uguale a una normale stringa con un backslash rappresentata come segue
\\

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

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

In una stringa normale, una sequenza di escape è considerata un carattere, ma in una stringa grezza, anche le backslash sono contate come caratteri. La lunghezza della stringa e di ogni carattere è la seguente.

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

Percorso di Windows

L'uso della stringa grezza è utile quando si vuole rappresentare un percorso di Windows come una stringa.

I percorsi di Windows sono separati da backslash, quindi se usate una stringa normale, dovete fare l'escape del percorso come segue, ma se usate una stringa grezza, potete scriverla così com'è. I valori sono equivalenti.
\\

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

Notate che una stringa che termina con un numero dispari di backslash risulterà in un errore, come descritto sotto. In questo caso, è necessario scrivere la stringa come una stringa normale, o concatenarla scrivendo solo la fine della stringa come una stringa normale.

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

Convertire stringhe normali in stringhe grezze con repr()

Se volete convertire una stringa normale in una stringa grezza ignorando (disabilitando) le sequenze di escape, potete usare la funzione integrata repr().

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

Ciò che repr() restituisce è una stringa che rappresenta un oggetto tale che ha lo stesso valore di quando è stato passato a eval(), con caratteri iniziali e finali.

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

Usando le fette, possiamo ottenere una stringa equivalente alla stringa grezza con r attaccato.

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

Notate il backslash alla fine.

Poiché un backslash sfugge al carattere di citazione immediatamente dopo di esso, si verificherà un errore se c'è un numero dispari di backslash alla fine della stringa. Un numero pari di backslash è OK.

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

print(r'\\')
# \\

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