Vérification de la chaîne entière avec une regex
Je suis en train de vérifier si une chaîne est un nombre, donc la regex "\d+" semblait bon. Cependant que la regex s'inscrit également "78.46.92.168:8000" pour une raison que je ne veux pas, un peu de code:
class Foo():
_rex = re.compile("\d+")
def bar(self, string):
m = _rex.match(string)
if m != None:
doStuff()
Et doStuff() est appelée lorsque l'adresse ip est entré. Je suis un peu confus, comment "." ou ":" match "\d"?
source d'informationauteur dutt | 2010-10-22
Vous devez vous connecter pour publier un commentaire.
\d+
correspond à n'importe quel nombre positif de chiffres dans votre chaîne, de sorte qu'il correspond à la première78
et réussit.Utilisation
^\d+$
.Ou, encore mieux:
"78.46.92.168:8000".isdigit()
re.match()
toujours matches depuis le début de la chaîne (à la différence dere.recherche()
) mais permet le match à la fin avant la fin de la chaîne.Par conséquent, vous avez besoin d'une ancre:
_rex.match(r"\d+$")
serait de travailler.Pour être plus explicite, vous pouvez également utiliser
_rex.match(r"^\d+$")
(ce qui est redondant) ou déposez simplementre.match()
complètement et il suffit d'utiliser_rex.search(r"^\d+$")
.\Z
correspond à la fin de la chaîne, tandis que$
correspond à la fin de la chaîne ou juste avant le saut de ligne à la fin de la chaîne, des expositions et des comportements différents dansre.MULTILINE
. Voir la syntaxe de la documentation pour obtenir des informations détaillées.Changement de
\d+
à^\d+$
Il ya un couple d'options en Python pour correspondre à l'ensemble d'une entrée avec un regex.
Python 2
En Python 2.x, vous pouvez utiliser
ou - pour éviter une correspondance avant la finale
\n
dans la chaîne:Ou le même que ci-dessus avec
re.search
méthode nécessitant l'utilisation de^
/\A
au début de la chaîne de l'ancre car il n'a pas d'ancrage du match au début de la chaîne:Noter que
\A
est clairement une chaîne de commencer à ancre, son comportement ne peut pas être redéfini avec tous les modificateurs (re.M
/re.MULTILINE
pouvez seulement de redéfinir la^
et$
comportement).Python 3
Tous les cas décrits dans le Python 2 de l'article et encore une méthode utile,
re.fullmatch
(également présent dans le PyPiregex
module):Donc, une fois que vous compilez les regex, il suffit d'utiliser la méthode appropriée: