L'analyse de texte réel nécessite souvent une seule regex pour reconnaître un élément structuré — des codes comme H1 ou (AH2b+EUH3) — et capturer le message qui suit. Écrit sur une seule ligne, ce motif se transformait en un mur dense de ponctuation : des groupes imbriqués, des lookaheads et des quantificateurs sans place pour des commentaires, et chaque modification impliquait de démêler toute la chaîne. Les corrections évidentes avaient chacune un coût : garder la ligne unique et chaque édition reste risquée ; écrire à la main en mode verbeux et le même sous-motif est dupliqué partout où il apparaît ; ajouter une bibliothèque de construction de regex et il faut apprendre une nouvelle syntaxe plus une dépendance.
L'approche a été de traiter le motif comme du code. L'auteur a défini chaque unité logique une fois — un fragment de code comme [A-Z]*H, le multicode qui englobe des codes séparés par des signes plus, puis le matcher complet — chacun comme une chaîne verbeuse brute avec des commentaires sur chaque ligne, composant des motifs plus grands à partir de plus petits via des espaces réservés {code}. Parce que re.VERBOSE ignore les espaces blancs et les commentaires avec dièse, chaque fragment se lit de haut en bas : les parenthèses et les alternances deviennent une structure visible au lieu d'une soupe de glyphes. Parce que les f-strings se résolvent au moment de la construction, ce qui parvient au module re reste une seule chaîne de motif ordinaire.
Le bénéfice se situe exactement là où les regex sur une ligne font mal. Chaque fragment est défini une fois, donc un changement de grammaire met à jour chaque motif qui l'incorpore ; les fragments peuvent être testés seuls avec re.findall avant d'être assemblés ; et rien de nouveau n'est entré dans la pile — l'auteur a utilisé deux fonctionnalités de la bibliothèque standard qui coexistent depuis longtemps et admet qu'il lui a fallu trois ans pour voir la combinaison. L'article documente les pièges : les dièses et les espaces nécessitent un échappement ou des classes de caractères, les quantificateurs à accolades doivent être doublés à l'intérieur des f-strings, et les indicateurs inline (?x) maintiennent le mode verbeux actif lorsque l'appelant contrôle les indicateurs.
Structurer la regex comme du code : définir chaque fragment une fois comme une chaîne verbeuse commentée et composer le motif final avec des f-strings
re.VERBOSE ignore déjà les espaces blancs et les commentaires, donc chaque fragment se lit comme du code documenté en utilisant uniquement la bibliothèque standard.
L'interpolation des f-strings assemble les fragments au moment de la construction, laissant une chaîne de motif ordinaire que tout appel re accepte sans modification.
Chaque fragment est défini une fois, donc un changement de grammaire met à jour chaque motif composé au lieu de copies inline répétées.
Les fragments sont testables isolément avant la composition, donc les échecs se localisent aux points de jonction entre eux.
Zéro dépendance et aucun nouveau DSL signifient que l'approche se transpose à toute base de code Python 3.6+ sans configuration.
Quand un motif résiste à la maintenance, n'ajoutez pas de bibliothèque : combinez des fonctionnalités que vous possédez déjà — des commentaires verbeux pour la lisibilité, l'interpolation pour la réutilisation — sans aucune dépendance.
Suites
Publié en mai 2022, il a recueilli 304 points et 90 commentaires sur Hacker News ; les réactions se partageaient entre considérer l'article comme une révélation et noter que découper les regex en sous-motifs réutilisables était déjà une pratique courante. Les commentateurs ont signalé des mécanismes plus puissants — les blocs de sous-programme DEFINE de PCRE et de Perl, et le module tiers regex — pour la réutilisation sans interpolation, et l'auteur a ajouté une section bonus montrant le même analyseur écrit avec DEFINE. L'article reste en ligne avec ces réserves documentées et son affirmation centrale intacte : des motifs composables et commentés sans aucune dépendance.
VÉRIFIEZ LES SOURCES
Les sources
- The unreasonable effectiveness of f-strings and re.VERBOSE death.andgravity.com · death.andgravity.com
- The unreasonable effectiveness of f-strings and re.verbose — Hacker News discussion Hacker News · news.ycombinator.com ·