lundi 19 décembre 2022

Utilisation avancée des groupes dans une regex Python

 Dans une regex les parenthèses servent  à capturer des caractères qui seront stockés dans l'objet Match.

Mais leurs fonctionnalités ne sont pas toujours bien connues.

Reference à un groupe : numerique ou nommée

Chaque parenthèse ouvrante provoque la création d'un groupe qui sera accessible par son numéro.

La numérotation commence à 1 , le texte capturé dans le groupe '1' pourra etre rappelé plus loin dans la

regex par '\1' .

La méthode groups() de l'objet match, retournera la liste des textes capturés. Le groupe 0 qui est un emplacement libre, contiendra tout le texte capturé.


Comme on  peut le voir ci-dessous, les groupes peuvent se voir attribuer un nom pour plus de lisibilité

Cette opération se réalise par le motif (?P=<NOM> .... ) 



La référence à une capture d'un groupe nommé se fait par le motif (?P=nom)
Ce nom se retrouvera dans les appels de méthode Match.group ou Match.span




Le site regex101 peut aider à la mise au point des regex.


La recherche en regardant en avant ou en arrière  (lookahead / lookbehind) .

C'est une jeu de motif très puissant qui permet de réaliser plusieurs contrôles ou d'enchainer plusieurs conditions sans consommer des caractères.

Exemples de recherche avant: on veut tronçonner la chaine ('123456789') par groupe de 2 en partant de la fin.

Avant de capturer un groupe, on va chercher à former des paires complète en avant du groupe à capturer.

Recherche en avant

Pour cela on utilise la séquence de groupe (?=...) ou sa forme négative  (?!...)

En ajoutant aux bons endroits le motif "(?:)" on ne capture plus les groupes inutiles

Le motif (?:...) permet d'effectuer de regroupement mais ne conserve pas la capture dans un groupe


Recherche en arrière

De manière symétrique à la recherche en avant, il est possible de faire dépendre la recherche d'un motif sur du texte situé en arrière (lookbehind).

Cette opération se réalise avec le motif (?<=...) ou par sa négation (?<!...)



L'avantage des regards avant ou arrière (look...) est qu'ils ne consomment pas de caractère. Il est donc possible de chainer les conditions




Les liens utiles:

Aucun commentaire: