2013-09-26 23 views
23

Dlaczego pep8 narzeka na następny ciąg w kodzie?ostrzeżenie pep8 na ciągu regex w Pythonie, Eclipse

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

Ostrzeżenie Otrzymuję:

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

może Pan wyjaśnić, co to ma znaczyć wiadomości? Co muszę zmienić w kodzie, aby przekazać ostrzeżenie?

Kod przechodzi testy i działa zgodnie z oczekiwaniami. Ponadto \d{3} jest prawidłowym wyrażeniem regularnym.

Odpowiedz

35

"\d" jest taki sam jak "\\d", ponieważ nie ma sekwencji unikowej dla d. Ale nie jest jasne dla czytelnika kodu.

Ale, rozważ \t. "\t" reprezentuje znak tabulacji, natomiast r"\t" reprezentuje znak literowy \ i t.

więc używać surowego ciąg kiedy masz na myśli dosłownego \ i d:

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

lub ucieczki backslash wyraźnie:

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

Dzięki, nie miałem pojęcia o przedrostek 'R' i jego funkcjonalności. – alandarev

+0

Nadchodzi późno, ale '\ d' nie jest wcale taki sam jak' \\ d'. Pierwsza dopasowuje dowolną cyfrę (Unicode); ten ostatni dopasowuje ukośnik odwrotny, a następnie 'd'. Nie są one równoważne. Wygląda na to, że Pylint jest w błędzie. –

+2

@moodforaday, Wypróbuj ''\ d' == '\\ d'' w powłoce interaktywnej Pythona. Również ''\ t' == '\\ t'' – falsetru