Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

La Compilation


L'utilisation d'expressions rationnelles en Python s'effectue en deux temps :

  • la compilation de l'expression,
  • la recherche de motifs satisfaisant l'expression.

On commence par préciser ici comment compiler des expressions rationnelles.

Compiler une expression rationnelle

La compilation d'une expression rationnelle fournit une instance de la classe RegexObject :

  >>> import re
  >>> p = re.compile('ab*')
  >>> print p
  <re.RegexObject instance at 80b4150>

re.compile() accepte des arguments en option, précisant son comportement futur. Par exemple, ce qui suit signifie que la distinction majuscule/minuscule devra être ignorée :

  >>> p = re.compile('ab*', re.IGNORECASE)

On notera qu'en python, les expressions rationnelles sont des chaînes de caractères, et qu'on en fait des objets en les compilant. Cela peut poser le problème suivant...

The Backslash Plague

On rappelle que le backslash \ signale qu'un caractère spécial doit être utilisé tel quel, sans invoquer ses propriétés particulières.

Supposons maintenant que l'on s'intéresse à la chaîne «\section».

Pour signaler que le backslash n'est pas l'échappement de ce qui suit, mais le vrai caractère \, il faut l'échapper. La chaîne que l'on recherchera, à l'origine de notre expression rationnelle, sera donc :

"\\section"

On recherche donc une chaîne de caractères constituée de deux backslash : notre expression rationnelle doit intercepter deux backslashs. Mais, une fois encore, dans une chaîne de caractère, si on veut un vrai backslash, il faut le doubler !

Au final, l'expression rationnelle permettant de trouver les "\section" sera :

  >>> re.compile("\\\\section")

C'est la peste des backslash : si on souhaite intercepter un backslash à l'aide d'une expression rationnelle, il faut en mettre 4 !

Les chaînes brutes

Il existe une solution : utiliser des chaînes brutes (raw string). Pour signaler que la chaîne "toto" est brute, on la précède d'un r, comme cela : r"toto".

Ces chaînes sont utilisées tel quel, sans être interprétées. Par exemple, r"\n" signifie « Deux caractères : un backslash, suivi d'un n », et non « Un retour à la ligne ».

Avec des chaînes brutes,

  >>> re.compile("\\\\section")

s'obtient plus facilement :

  >>> re.compile(r"\\section")

Il est conseillé de toujours utiliser des chaînes brutes pour définir ses expressions rationnelles.

Page Actions

Recent Changes

Group & Page

Back Links