2013-09-26 2 views
23

코드의 다음 문자열에서 pep8이 불평하는 이유는 무엇입니까?pep8 Python, Eclipse의 정규식 문자열에 대한 경고

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

경고는 내가 나타납니다

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

당신은 메시지의 의미는 무엇인가 설명 할 수 있습니까? W1401 경고가 전달되도록 코드에서 변경해야하는 항목은 무엇입니까?

코드가 테스트를 통과하고 예상대로 실행됩니다. 또한 \d{3}은 유효한 정규 표현식입니다.

답변

35

"\d"d의 이스케이프 시퀀스가 ​​없기 때문에 "\\d"과 같습니다. 그러나 코드의 독자에게는 명확하지 않습니다.

그러나, \t을 고려하십시오. "\t"은 tab chracter를 나타내며 r"\t"\t 문자를 나타냅니다.

는 문자 \d 의미 그래서 원시 문자열을 사용하십시오

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

또는 명시 적으로 백 슬래시를 이스케이프 :

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

감사합니다, 나는 접두사 'R'과 그 기능에 대한 아무 생각이 없었다. – alandarev

+0

늦어 지지만 '\ d'는 '\\ d'와 전혀 다릅니다. 전자는 임의의 (유니 코드) 숫자와 일치합니다. 후자는'd'가 뒤 따르는 백 슬래시와 일치합니다. 그들은 동등하지 않습니다. Pylint는 여기에서 틀린 것처럼 보입니다. –

+2

@moodforaday, 파이썬 대화 형 쉘에서'\ d '=='\\ d '를 사용해보십시오. 또한 ''\ t '=='\\ t '' – falsetru

관련 문제