web-dev-qa-db-fra.com

avertissement pep8 sur la chaîne d'expression régulière en Python, Eclipse

Pourquoi pep8 se plaint-il de la chaîne suivante dans le code?

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

L'avertissement que je reçois:

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

Pouvez-vous expliquer quelle est la signification du message? Que dois-je changer dans le code pour que l'avertissement W1401 soit passé?

Le code passe les tests et s'exécute comme prévu. En outre \d{3} est une expression rationnelle valide.

39
alandarev

"\d" est identique à "\\d" car il n'y a pas de séquence d'échappement pour d. Mais ce n'est pas clair pour le lecteur du code.

Mais considérez \t. "\t" représente le caractère de tabulation, tandis que r"\t" représente littéral \ et t caractère.

Utilisez donc une chaîne brute lorsque vous voulez dire littéral \ et d:

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

ou échapper explicitement à la barre oblique inverse:

re.compile("\\d{3}")
61
falsetru

Python n'est pas en mesure d'analyser '\d' comme séquence d'échappement, c'est pourquoi elle génère un avertissement.

Après cela, il est transmis littéralement à l'analyseur d'expressions rationnelles, fonctionne très bien comme un E.S. pour regex.

1
userA789