Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Les Groupes


Présentation

Souvent, on ne souhaite pas uniquement savoir si un motif est présent dans un texte. On veut pouvoir réaliser des traitements supplémentaires, et il est alors utile de distinguer les groupes sémantiques du texte reconnu.

Par exemple, supposons que l'on ait construit une expression rationnelle pour relever l'entête d'un fichier html. On peut distinguer des groupes dans cette entête : le titre de la page, son encodage... Il est possible de récupérer les différentes valeurs de ces groupes à l'aide d'expressions rationnelles.

Les groupes sont définis à l'aide des méta-caractères ( et ), et ont deux utilisations pratiques : grouper des sous-expressions rationnelles, comme en mathématiques

  >>> p = re.compile('(ab)*')
  >>> print p.match('ababababab').span()
  (0, 10)

Et permettre la récupération des chaînes reconnues par chaque sous-groupe, en les identifiant avec des numéros...

Les numérotations des sous-groupes

Il est possible de passer le numéro d'un sous-groupe aux méthodes group(), start(), end(), ou span().

Cette numérotation s'effectue ainsi :

  • Le groupe 0 fait toujours référence à toute la chaîne reconnue.
  • Les sous-groupes sont numérotés de la gauche à la droite, en partant de 1 (on peut compter les parenthèses ouvrantes, en cas de doute) :
 >>> p = re.compile('(a(b)c)d')
 >>> m = p.match('abcd')
 >>> m.group(0)
 'abcd'
 >>> m.group(1)
 'abc'
 >>> m.group(2)
 'b'

Récupérer plusieurs groupes

On peut passer plusieurs numéros à group() :

  >>> m.group(2,1,2)
  ('b', 'abc', 'b')

Il est possible aussi de récupérer l'intégralité des sous-groupes, grâce à la méthode groups().

Cette dernière renvoie tous les sous-groupes, dans l'ordre, à partir du numéro 1 :

  >>> m.groups()
  ('abc', 'b')

Références entre groupes

Dans une expression rationnelle, on peut faire référence au groupe n°i en échappant le i : \i.

Par exemple, si on souhaite extraire les mots qui se répètent, en se suivant, dans un texte, comme les « the » de la phrase « Paris in the the spring », on peut procéder comme suit :

  • Un mot s'obtient par le groupe suivant : (\b\w+) (« Un groupe, constitué d'au moins un caractère alphanumérique, que rien ne précède »)
  • Ce mot doit être suivi d'au moins un espace (\s+),
  • Et cet espace doit être suivi du contenu \1 du premier sous-groupe reconnu.

L'expression rationnelle correspondant à nos vœux est donc :

r'(\b\w+)\s+\1'.

Dans ce qui précède, le \1 fait référence au sous-groupe n°1, c'est-à-dire au mot sensé se répéter. Et ça marche...

  >>> p = re.compile(r'(\b\w+)\s+\1')
  >>> p.search('Paris in the the spring').group()
  'the the'

Page Actions

Recent Changes

Group & Page

Back Links