Table des matières

Notepad++, les expressions régulières

Extrait de nliautaud.fr

Une expression régulière (abrégé expreg), en anglais regular expression (abrégé regexp), est une chaine de caractère permettant de décrire un ensemble variable par l'utilisation d'une syntaxe précise. Cette chaine de caractères est appelée motif, en anglais pattern.

Voir Expression rationnelle.

La maîtrise de cette syntaxe vous permettra une manipulation de textes sans limite dans Notepad++ mais aussi dans la majeure partie des langages de programmation.

Distinguer les motifs et leurs résultats

Il faut bien saisir qu'un motif de recherche vise à chercher des résultats lui correspondant dans un texte, qui peuvent être remplacés selon un motif de remplacement :

Syntaxe du motif de recherche

Notepad++ (ou plus précisément sa composante Scintilla) ne prend en compte que la syntaxe de base des expressions régulières, mais permet déjà un très grand nombre d'opérations.

Les caractères

 Les expressions régulières dans Notepad++ ne sont sensibles à la casse
 que si l'option de recherche Respecter la casse est activée.

Exemples

Début et fin de ligne

Exemples

Les répétitions

Exemples

Les ensembles

Exemples

Les groupes

Exemples

Échappement

Exemples

Les mots

Exemples

Syntaxe du motif de remplacement

Exemples

Utilisation dans Notepad++

La fenêtre de recherche et remplacement

Lors d'une recherche ou d'un remplacement, il est proposé de changer de Mode de recherche : choisissez Expression Régulière.

Indiquez dans le champ Recherche votre motif de recherche, et en cas de remplacement indiquez dans Remplacer votre motif de remplacement.

Les plugins utiles

La fenêtre Find/Replace de TextFX est faite pour la manipulation d’expressions régulières, et contiens plusieurs fonctionnalités supplémentaires rendant le travail plus aisé.

Le plugin RegEx Helper est un atout important, car il permet de visualiser directement tous les résultats d’un motif.

Exemples

Insérer du texte en début de ligne

Ouvrir la fenêtre de remplacement avec Ctrl+H, et sélectionner le mode Expressions Régulières.

Rechercher le premier caractère en début de ligne (dans un groupe pour pouvoir le réécrire) avec :

 ^(.)

Remplacer par le texte voulu suivi du résultat du groupe, par exemple :

  1. \1

Ainsi le texte :

 abricot
 banane
 cerise

Devient :

  1. abricot
  2. banane
  3. cerise

Insérer du texte en fin de ligne

Ouvrir la fenêtre de remplacement avec Ctrl+H, et sélectionner le mode Expressions Régulières.

Rechercher le dernier caractère en fin de ligne (dans un groupe pour pouvoir le réécrire) avec :

 (.)$

Remplacer par le résultat du groupe suivi du texte voulu, par exemple :

 \1 :

Ainsi le texte :

 abricot
 banane
 cerise

Devient :

 abricot :
 banane :
 cerise :

Supprimer des décimales

Ouvrir la fenêtre de remplacement avec Ctrl+H, et sélectionner le mode Expressions Régulières.

Rechercher « un chiffre ou plus suivi d’un point ou d’une virgule puis d’au moins un chiffre » :

 ([0-9]+)[.,][0-9]+

L’utilisation d’une parenthèse capturante permet de ne conserver au remplacement que la valeur entière, au moyen de :

 \1

Par exemple :

 8 1.0 56.82 589,273

Devient :

 8 1 56 589

Arrondir des valeurs

La recherche/remplacement ne permet pas d’opérations proprement conditionnelles : Notepad++ n’est pas d’un interpréteur ou un compilateur et ne peut traiter des opérations mathématiques.

 Il est donc, de manière générale, impossible d’arrondir
 automatiquement et facilement des valeurs dans Notepad++.

La méthode suivante permet d’arrondir toute valeur positive à l’unité la plus proche. Elle nécessite toutefois un grand nombre d’opérations, augmentant avec la taille des valeurs :

Il est donc très vite plus intéressant de faire appel à un langage de programmation.

On prendra pour exemple la série suivante :

D’abord, arrondir les valeurs dont la première décimale est inférieure à 5 correspond à en supprimer les décimales. On recherchera donc :

 ([0-9]+)[.,][0-4][0-9]*

Pour n’en garder que la valeur entière :

 \1
 0    58      982    		(première décimale inférieure à 5)
 4.5  98.663  506.942
 19.6  59.701  189.842

Ensuite, les valeurs dont la première décimale est comprise entre 5 et 9 doivent être augmentées de un : l’arrondi de 12.71 est 13.

Les valeurs dont le chiffre des unités est inférieur à 9 n’influeront pas le chiffre des dizaines. On peut donc déterminer neuf remplacements à effectuer afin de remplacer le chiffre des unités en conservant les chiffres précédents :

 ([0-9]*)0[.,][5-9][0-9]* remplacé par \11
 ([0-9]*)1[.,][5-9][0-9]* remplacé par \12
 ([0-9]*)2[.,][5-9][0-9]* remplacé par \13
 ([0-9]*)3[.,][5-9][0-9]* remplacé par \14
 ([0-9]*)4[.,][5-9][0-9]* remplacé par \15
 ([0-9]*)5[.,][5-9][0-9]* remplacé par \16
 ([0-9]*)6[.,][5-9][0-9]* remplacé par \17
 ([0-9]*)7[.,][5-9][0-9]* remplacé par \18
 ([0-9]*)8[.,][5-9][0-9]* remplacé par \19
 0    58      982
 5    99      507   		(chiffre des unités inférieur à 9)
 19.6  59.701  189.842

Il ne reste à ce stade plus que les valeurs avec une unité de 9, dont le remplacement doit influer sur les chiffres des dizaines.

Les remplacer demande alors de reprendre le raisonnement précédent : neuf remplacements pour les dizaines comprises entre 0 et 8 en mettant le chiffre des unités à 0.

 ([0-9]*)09[.,][5-9][0-9]* remplacé par \110
 ([0-9]*)19[.,][5-9][0-9]* remplacé par \120
 ...
 0    58      982
 5    99      507
 20    60      190   		(chiffre des dizaines inférieur à 9)

Et l’on recommence les neuf opérations pour les dizaines égales à 9, puis pour les centaines, etc.