Python regex pour le hachage MD5
Je suis venu avec:
re.findall("([a-fA-F\d]*)", data)
mais il n'est pas infaillible, est-il une meilleure façon de saisir tous les MD5 des codes de hachage?
- Ce genre de fous êtes-vous d'épreuvage contre?
- Ajouter
r
avant"
: c = r[a-fA-F\d]"; re.findall(r"(?<!%s)(?:%s){32}(?!%s)" % (c)*3, données) - Merci à tous, je vais ajouter la longueur de la chose, qui était la principale chose que j'ai eu un problème avec. Va utiliser le 'r' chose à l'avenir aussi, merci pour l'astuce!
(c,)*3
devrait être remplacé par(c,c,c)
dans mon commentaire.
Vous devez vous connecter pour publier un commentaire.
Bien, depuis md5 est juste une chaîne de 32 chiffres hexadécimaux, tout ce que vous pourriez ajouter à votre expression est une case à cocher pour "32 chiffres", peut-être quelque chose comme cela?
[0-9a-f]{32}
^[a-fA-F\d]{32}$
Lors de l'utilisation des expressions régulières en Python, vous devriez toujours utiliser le raw syntaxe de la chaîne de
r"..."
:Cela permettra d'assurer que la barre oblique inverse dans la chaîne n'est pas interprété par le normal Python s'échapper, mais il est passé à travers la
re.findall
fonction de sorte qu'il peut voir le\d
verbatim. Dans ce cas, vous avez de la chance que\d
n'est pas interprété par le Python s'échapper, mais quelque chose comme\b
(qui a un sens complètement différent en Python s'échapper et dans les expressions régulières) serait.Voir le
re
documentation du module pour plus d'informations.Voici une meilleure façon de le faire que d'autres solutions:
Cela garantit que le match doit être une chaîne de 32 chiffres hexadécimaux personnages, mais qui n'est pas contenue dans une chaîne plus longue des autres caractères alphanumériques. Avec toutes les autres solutions, si il ya une chaîne de 37 contiguë hexadécimaux le modèle correspondent à la première de 32 et de l'appeler un match, ou si il ya une chaîne de 64 caractères hexadécimaux il serait divisé en deux et chaque match de la moitié indépendante match. À l'exclusion de ceux-ci est accomplie à l'aide de l'anticipation et les assertions arrières, qui sont non-capture et n'affectera pas le contenu du match.
Note également l' (?je le drapeau qui sera fait de le patron de la casse, ce qui économise un peu de taper, et que l'habillage de l'ensemble du motif, entre parenthèses, est superflu.
Ici une assez pédant expression:
Mais, si c'est juste un'int assez bon fr'yer, parce que vous savez il y a seulement 1 dans 3402823 chance d'obtenir un tout-numérique MD5 checksum, et de 42 milliards à une chance de tous les alphanumérique somme de contrôle MD5, alors, vous savez, nous devrions sans doute nous dire FU à ceux valide sommes et aussi de ne pas accepter tout ce qui n'est pas alphanumérique:
oui, j'ai été terriblement ennuyé au travail.
r"\b[a-f\d]{32}\b|\b[A-F\d]{32}\b"
est mieux.MD5 Python Regex Avec des Exemples
Depuis un MD5 est composé d'exactement 32 Caractères Hexadécimaux, et parfois le hachage est présenté à l'aide des lettres en minuscules, il faut prendre en considération aussi bien.
L'exemple ci-dessous a été testé contre les quatre différentes chaînes:
Que diriez-vous "([a-fA-F\d]{32})", ce qui l'oblige à être de 32 caractères de long?