Avviso: sequenza di escape non valida: cosa usare al posto di \ d?


106

Ho riscontrato un problema con il remodulo in Python 3.6.5. Ho questo modello nella mia espressione regolare:

'\\nRevision: (\d+)\\n'

Ma quando lo eseguo, ricevo un file DeprecationWarning.

Ho cercato il problema su SO e non ho trovato la risposta, in realtà - cosa dovrei usare invece di \d+? Solo [0-9]+o forse qualcos'altro?


2
Non dovrebbe essere il problema, fornire altro codice?
Sraw

3
Doppia fuga \do uso r'\\nRevision: (\d+)\\n'?
revo

Risposte:


176

Python 3 interpreta le stringhe letterali come stringhe Unicode e quindi il tuo \dviene considerato come un carattere Unicode con escape.

Dichiara invece il tuo pattern RegEx come stringa non elaborata anteponendo r, come di seguito:

r'\nRevision: (\d+)\n'

Ciò significa anche che puoi eliminare anche gli escape \npoiché questi verranno semplicemente analizzati come caratteri di nuova riga da re.


8
Per essere un po 'più precisi, \dviene trattata come una sequenza di escape non riconosciuta e come tale viene lasciata invariata. A partire da Python 3.6 viene fornito un avviso di deprecazione. In qualche futura versione di Python sarà un SyntaxError. Dettagli da "2.4.1. String e byte letterali" in Docs.
VPfB

@VPfB il thread è vecchio, ma stavo cercando risposte sullo stesso problema. Se \ d viene trattato come un carattere Unicode di escape, come faccio a distinguere d (carattere alfabetico) da \ d (qualsiasi cifra) senza trattare il pattern regex come stringa grezza? (Stessa domanda per \ w, \ W ecc ...)
giulia_dnt

2
@theggg Se ho capito correttamente la tua domanda, esci dalla barra rovesciata, in modo che la stringa venga letta '\\d'.
ACascarino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.