2013-09-26 15 views
23

Perché pep8 si lamenta della stringa successiva nel codice?avviso pep8 sulla stringa regex in Python, Eclipse

import re 
re.compile("\d{3}") 

L'avvertimento Ricevo:

ID:W1401 Anomalous backslash in string: '\d'. String constant might be missing an r prefix. 

si può spiegare qual è il significato del messaggio? Cosa devo modificare nel codice in modo che venga passato l'avviso W1401?

Il codice supera i test e viene eseguito come previsto. Inoltre \d{3} è un'espressione regolare valida.

risposta

35

"\d" è uguale a "\\d" perché non esiste una sequenza di escape per d. Ma non è chiaro per il lettore del codice.

Tuttavia, considerare \t. "\t" rappresentano tab chracter, mentre r"\t" rappresentano letteralmente \ e t carattere.

Così utilizzare stringa grezzo quando si intende letterale \ e d:

re.compile(r"\d{3}") 

o la fuga backslash esplicitamente:

re.compile("\\d{3}") 
+0

Grazie, non avevo idea circa il prefisso 'r' e la sua funzionalità. – alandarev

+0

Arriva tardi, ma '\ d' non è affatto uguale a' \\ d'. Il primo corrisponde a qualsiasi cifra (Unicode); quest'ultimo corrisponde a una barra rovesciata seguita da 'd'. Non sono equivalenti. Pylint sembra essere nel torto qui. –

+2

@moodforaday, prova ''\ d' == '\\ d'' nella shell interattiva python. Anche ''\ t' == '\\ t'' – falsetru