Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Rechercher Et Remplacer


Les expressions rationnelles sont fréquemment utilisées pour rechercher les chaînes satisfaisant un motif, et les remplacer par d'autres chaînes.

La méthode sub

En python, ce remplacement peut se réaliser avec la méthode sub() :

sub(remplacement, chaine[, compteur = 0])

qui prend en argument la valeur de remplacement (une chaîne, ou une fonction), et la chaîne sur laquelle œuvrer.

Le retour est la nouvelle chaîne, obtenue par le remplacement voulu.

Toutes les occurrences sont remplacées, à moins qu'un troisième argument (compteur) ne soit passé à sub(). Auquel cas, le remplacement s'arrête quand le nombre de changements précisés dans compteur est atteint.

Dans l'exemple ci-dessous, on remplace des couleurs (bleu, blanc, rouge) par le mot « couleur » :

  >>> p = re.compile( '(bleu|blanc|rouge)')
  >>> p.sub( 'couleur', 'ciel bleu avec un nuage blanc')
  'ciel couleur avec un nuage couleur'
  >>> p.sub( 'couleur', 'ciel bleu avec un nuage blanc', count=1)
  'ciel couleur avec un nuage blanc'

La méthode subn

La méthode subn() est similaire à sub(). La seule différence est le retour, qui est un couple constitué :

  • de la chaîne dont le motif a été remplacé,
  • du nombre de remplacements.

Par exemple,

  >>> p = re.compile( '(bleu|blanc|rouge)')
  >>> p.subn( 'couleur', 'ciel bleu avec un nuage blanc')
  ('ciel couleur avec un nuage couleur', 2)
  >>> p.subn( 'couleur', 'pas de couleur ici')
  ('pas de couleur ici', 0)

Chaînes de remplacement et caractères échappés

Si le remplacement est une chaîne qui contient des backslash, comme \n ou \t, chaque caractère échappé sera «évalué».

Par exemple, le \n sera une nouvelle ligne...

Les références aux sous-groupes

Numérotées

Les références aux sous-groupes, comme \6, sont remplacés par la sous-chaîne reconnue correspondante. Un exemple est plus parlant...

L'exemple suivant reconnaît le mot «section» suivi d'une chaîne encadrée par des accolades «{» et «}», et change section en subsection :

  >>> p = re.compile('section{ ( [^}]* ) }', re.VERBOSE)
  >>> p.sub(r'subsection{\1}','section{First} section{second}')
  'subsection{First} subsection{second}'

Nommées

Il est aussi possible de faire référence aux chaînes des sous-groupes nommés (les sous-groupes définis par (?P<nom>...)). La syntaxe est la suivante :

\g<nom>
Utilisera la chaîne reconnue par le sous-groupe nommé nom.
\g<num>
Utilisera la chaîne reconnue par le sous-groupe numéro num. \g<2> équivalent à \2 ; l'utilité d'une telle redondance est de se prévenir des situations ambigües, comme \20.

Les trois exemples suivants sont équivalents :

  >>> p = re.compile('section{ (?P<name> [^}]* ) }', re.VERBOSE)
  >>> p.sub(r'subsection{\1}','section{First}')
  'subsection{First}'
  >>> p.sub(r'subsection{\g<1>}','section{First}')
  'subsection{First}'
  >>> p.sub(r'subsection{\g<name>}','section{First}')
  'subsection{First}'

Le remplacement est une fonction

L'argument remplacement de sub et subn peut encore être une fonction, qui sera appliquée à chaque motif reconnu.

La fonction doit recevoir un argument de type MatchObject, qu'elle peut utiliser pour définir son retour - une chaîne de caractères.

Voici par exemple comment remplacer chaque nombre d'un texte en sa valeur hexadécimale :

  >>> def hexrepl( match ):
  ...     Renvoie la chaîne de la valeur hexadécimale d'un nombre
  ...     valeur = int( match.group() )
  ...     return hex(valeur)
  ...
  >>> p = re.compile(r'\d+')
  >>> p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.')
  'Call 0xffd2 for printing, 0xc000 for user code.'

La fonction re.sub()

Le module re possède aussi sa propre fonction sub().

Le premier argument de re.sub() est le motif à reconnaître : une chaîne, ou un objet RegexObject.

>>> import re

  >>> def hexrepl(match):
  ...     valeur = int( match.group() )
  ...     return hex(valeur)
  ... 
  >>> re.sub(r'\d+', hexrepl, 'Call 65490 for printing, 49152 for user code.')
  'Call 0xffd2 for printing, 0xc000 for user code.'

Page Actions

Recent Changes

Group & Page

Back Links