[Python] :comment créer une fonction pour lancer vos regex ? (exemple : capture d’une ip)

Print Friendly, PDF & Email

Si vous développez un peu de script en python, vous vous rendrez compte que vous pouvez parfois appeler de très nombreuses fois le module regex et que à chaque fois (quasiment), vous devrez :

  • compilez la regex (son pattern)
  • appliquer une classe (search assez souvent)
  • si vous utilisez classe vous retournerez souvent la sous classe group(1)

Ben oui c’est répétitif. En grosse faignasse, on fait des copier/coller au début… je sais je suis passé par là.

Bref si vous le faites une fois dans votre script ou site ça va mais ce n’est pas souvent le cas. Au -delà de 2 fois, il faut créer une fonction ya pas de lézard comme dirait l’autre.

Je vous propose cette petite fonction clef en main et adaptable bien sûr (ou pourrait par exemple lui passer un paramètre supplémentaire, le numéro de group).

#on oublie pas l'import du module re

import re

#puis la fonction
def regex(reg,line):
        var=re.compile(reg)
        return var.search(line).group(1) if var.search(line) else ""

# que l'on utilise comme ceci
ip=regex("((([0-9]{1,3})(\.)){3}[0-9]{1,3})",ligne)

Donc un peu d’explication de code :

  • on import re
  • on défini une fonction récupérant deux arguements
    • reg : le pattern
    • line : la ligne à analysée
  • on compile la regex
  • on retourne :
    • si on trouve rien “” un vide
    • sinon la valeur de group(1)

Pour l’exemple, vous l’aurez reconnu c’est la capture d’une ip dans la variable ligne (à définir). Et vous comment faites vous ? j’imagine que certains font beaucoup mieux.

Découvrez  [Python] : lire et écrire facilement dans un fichier avec PATHLIB ... et un peu plus