Par exemple, lorsque vous écrivez des gestionnaires pour URL (et que Dieu vous aide si vous en écrivez un à partir de zéro), vous voulez souvent afficher le même résultat, indépendamment du suivi '/' dans l'URL. E.g https: // Exemple.com / utilisateur / paramètres / et https: // exemple.com / utilisateur / Paramètres devraient tous deux pointer la même page malgré le suivant '/'.
Cependant, vous ne pouvez pas ignorer toutes les barres obligées, comme:
Donc, vous trouvez une règle comme: «Ignorez juste les barres obligées suivie d'un espace vide."Et si vous le souhaitez, vous pouvez encoder cette règle avec une série de déclarations IF-Else. Mais cela deviendra lourd assez rapidement. Vous pouvez écrire une fonction disant CleanUrl () qui peut résumer cela pour vous. Mais l'univers commencera bientôt à vous lancer plus de boules de courbe. Vous vous retrouverez bientôt à écrire des fonctions pour Cleanheaders (), ProcessLog (), etc. Ou vous pouvez utiliser une expression régulière chaque fois qu'un type de correspondance de modèle est requis.
Avant d'entrer dans les détails des expressions régulières, il convient de mentionner le modèle que la plupart des systèmes ont pour les flux de texte. Voici un court résumé (incomplet):
Par souci de simplicité, je veux que vous imaginiez qu'un fichier est composé de lignes se terminant par un caractère Newline. Nous divisons ce fichier en lignes individuelles (ou chaînes) à chacun se terminant avec une nouvelle ligne ou un caractère normal (pour la dernière ligne).
Regex et chaîne
Un regex n'a rien, en particulier, avec les fichiers. Imaginez-le comme une boîte noire qui peut prendre en entrée n'importe quelle chaîne arbitraire de toute longueur (finie) et une fois qu'elle atteint la fin de cette chaîne, elle peut soit:
Malgré sa nature noire, j'ajouterai quelques autres contraintes à ce machinaire. Un regex lit une chaîne séquentiellement, De gauche à droite, et il ne lit un seul personnage à la fois. Donc une chaîne "Linuxhint" avec être lu comme:
'L "i" n "u" x "h" i "n" t' [gauche à droite]
Commençons simples
Le type de regex le plus simpliste serait de rechercher et de faire correspondre une chaîne «C». L'expression régulière pour elle est juste «C». Assez trivial. La façon de le faire dans Python vous obligerait à importer d'abord le concernant module pour les expressions régulières.
>>> Importer Re
Nous utilisons ensuite la fonction RE.recherche(motif, chaîne) où modèle est notre expression régulière et chaîne dans la chaîne d'entrée dans laquelle nous recherchons le motif.
>>> re.Recherche («C», «Cette phrase a un C délibéré dedans»)La fonction prend le motif «C», la recherche dans la chaîne d'entrée et imprime l'emplacement (Span) où ledit modèle se trouve. Cette partie de la chaîne, cette sous-chaîne est ce qui correspond à notre expression régulière. S'il n'y avait pas de correspondance de ce type, la sortie serait un Aucun objet.
De même, vous pouvez rechercher le modèle «expression régulière» comme suit:
>>> re.Recherche («Expression régulière», «Nous pouvons utiliser des expressions régulières pour la recherche de modèles.»)concernant.search (), re.match () et re.correspondance parfaite()
Trois fonctions utiles du module RE comprennent:
concernant.recherche(motif, chaîne)
Cela revient la sous-chaîne qui correspond au modèle, comme nous l'avons vu ci-dessus. Si aucune correspondance n'est trouvée alors Aucun est retourné. Si plusieurs sous-chaînes sont conformes à un modèle donné, seule la première occurrence est signalée.
concernant.correspondre(motif, chaîne)
Cette fonction essaie de faire correspondre le modèle fourni depuis le début de la chaîne. S'il rencontre une pause quelque part à mi-chemin, il revient Aucun.
Par exemple,
>>> re.Match ("Joh", "John Doe")Où comme la chaîne «Mon nom est John Doe» n'est pas un match, et donc Aucun est retourné.
>>> imprimer (re.Match («Joh», «Mon nom est John Doe»))concernant.correspondance parfaite(motif, chaîne)
Ceci est plus stric Aucun.
>>> imprimer (re.Fullmatch ("Joh", "Joh"))J'utiliserai juste le concernant.recherche() fonction dans le reste de cet article. Chaque fois, je dis que le regex accepte cette chaîne, cela signifie que ATHE concernant.recherche() La fonction a trouvé une sous-chaîne correspondante dans la chaîne d'entrée et a renvoyé cela, au lieu de Aucunobjet.
Caractères spéciaux
Des expressions régulières comme «John» et «C» ne sont pas très utiles. Nous avons besoin de caractères spéciaux dont une moyenne spécifique dans le contexte des expressions régulières. Voici quelques exemples:
Il y a beaucoup plus à couvrir, mais je vous recommande d'apprendre au lieu de surcharger votre cerveau avec beaucoup de symboles obscurs et de cas de bord. En cas de doute, les documents Python sont d'une grande aide et maintenant vous en savez assez pour suivre facilement les documents.
Si vous voulez voir une interprétation visuelle de votre regex, vous pouvez visiter Debuggex. Ce site génère une vue de votre regex en temps réel et vous permet de le tester contre diverses chaînes d'entrée.
Pour en savoir plus sur l'aspect théorique des expressions régulières, vous voudrez peut-être examiner les deux premiers chapitres de l'introduction à la théorie du calcul de Michael Sipser. Il est très facile à suivre et montre l'importance des expressions régulières comme un concept principal de calcul lui-même!