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:

lundi 5 décembre 2022

Visualiser un fichier RST

Le format RST  ( reStructuredTex) est un langage de balisage simplifié destiné à documenter facilement du code. Il fait partie intégrante du langage Python (PEP 287 – reStructuredText Docstring Format).

Aussi, il est pratique d'utiliser du RST dans de la docstring d'un module ou d'une classe. Des générateurs de documentation comme SPHINX pourront s'en servir. 

Le site github en fait un usage important dans la présentation des projets en mettant en avant le fichier README.rst des projets (exemple ici avec pycobol) .

Le moyen le plus simple pour avoir une idée du rendu est d'installer l'utilitaire Python Restview:
pip install restview

Puis lancer la commande: Restview <mon_fichier.rst>
Un mini serveur web sera lancé.

Le navigateur ouvrira une page html avec votre RST mis en forme.
Les modifications dans le fichier RST seront immédiatement visibles dans le navigateur

Les balises basiques les plus usitées sont:
Le '=' sous toute un texte pour l'afficher comme un titre.
Le '-' sous toute un texte pour l'afficher comme un sous-titre
Le '*'  Pour commencer une liste