Affichage des articles dont le libellé est regex. Afficher tous les articles
Affichage des articles dont le libellé est regex. Afficher tous les articles

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: