Rechercher et remplacer du texte avec Notepad++ et quelques regex
Ajoutée dans Bureautique, Webmaster, le 11/11/09,
Notepad++ est un éditeur de texte qui gère les expressions régulières (regex) lorsqu’on souhaite rechercher et remplacer du texte. Ce gros avantage (gestion des regex) permet d’automatiser pas mal les ajouts, supressions, sélections de caractères dans un texte tout en visant juste. Voyons ensemble 8 cas concrets de rechercher et remplacer par (raccourci CTRL+H) qui vont vous permettre de retravailler vos données avant utilisation sous excel, calc, writer, word, ou éditeur html de votre blog.
Au sommaire de ce tutoriel:
- Télécharger Notepad++
- Rechercher et Remplacer par dans Notepad++
- Notepad++ et les expressions régulières
- 8 exemples pratiques de rechercher et remplacer par
- Quelques liens pour aller encore plus loin !

Télécharger Notepad++

Notepad++ est devenu mon éditeur de texte par défaut… C’est avec Notepad++ que j’ai créé toutes les pages de Jeanviet.info (HTML, CSS). Je l’utilise aussi pas mal au travail pour retravailler des données. La grande force de Notepad++ est de gérer les expressions régulières lorsqu’on souhaite rechercher et remplacer du texte (CTRL+H)

Rechercher et Remplacer par dans Notepad++

Une fois que vous aurez ouvert votre fichier texte dans Notepad++, il suffira d’appuyer simultanément sur les touches CTRL et H (ou depuis le menu Rechercher -> Remplacer…) pour ouvrir la fenêtre Rechercher et remplacer par.

En (1) on met le texte générique (avec ou sans expressions régulières) à remplacer, en (2) le texte qui viendra en remplacement. En (3) on coche la case Expression régulière ou Mode étendu si nécessaire…. Et on appuie sur Remplacer tout ! si le résultat escompté n’est pas le bon, vous pouvez toujours revenir en arrière avec le raccourci clavier CTRL + Z.

Notepad++ et les expressions régulières

- Qu’est-ce qu’une expression régulière en informatique ?
- Les pincipales regex à utiliser avec notepad++
- Conserver le texte d’une regex sous notepad++

Les expressions régulières (regex) en informatique sont des règles qui permettent d’isoler dans une zone de texte certains types de caractères (lettre, numéro), ensemble de caractères (mots de 3 lettres, nombre à 4 chiffres, mots commencant par…) , position dans le texte (début, fin, saut de ligne).

Lorsqu’on a isolé ces bouts de textes aux prorpiétés choisies, on peut les supprimer, effacer tout ce qui se trouve autour, ou leur ajouter du texte. Les regex permettent d’automatiser le traiement de gros fichiers de données… Si vous gérez des fichiers textes, excel de plus de 100 lignes, les regex vont vous faire gagner du temps !

Comme ceci est très abstrait, voici quelques exemples de ce que peuvent faire les regex :
- Trouver dans un texte toutes les phrases qui commencent par "il était une foie" et remplacer le texte par "Il était une fois" (^il était une foie)
- Chaque fois qu’un texte se termine par un point, on peut forcer un retour à la ligne (.$)
- Trouver dans un texte tous les mots qui contiennent 2 o consécutifs (.*oo.*)

Les Principales Regex à utiliser avec notepad

| regex | effet | exemple |
|---|---|---|
| . | pour remplacer un caractère | ex: "jeanvie." va trouver "jeanviet" et "jeanvier" |
| [...] | pour indiquer un ensemble de caractère | ex: "[éèêë]" pour trouver un accent |
| [^...] | pour indiquer des caractères complémentaires | ex: "[^0-9]" pour trouver tout ce qui est différent d’un chiffre |
| ^ | pour indiquer que le caractère doit être au début d’une ligne | ex: "^jeanviet" pour trouver toutes les lignes qui commencent par jeanviet |
| $ | pour indiquer que le caractère doit être en fin de ligne | ex: "jeanviet$" pour trouver toutes les lignes qui se terminent par jeanviet |
| .* | n’importe quel nombre de caractère entre deux caractères | ex:"j.*t" trouvera jeanviet, jet, jouet |


Conserver le texte d’une regex

Pour expliquer la règle qui permet de conserver le texte d’une regex, je vais partir d’un exemple… Prenons ces 4 lignes de texte :
- mois : jeanviet 2010
- mois : février 2010
- mois : mars 2010
- mois : avril 2010
Je ne veux garder que le mois, c’est à dire jeanviet, février, mars, avril. On va donc supprimer tout ce qui se trouve avant les " : " et l’année " 2010" et conserver le mois entre les deux.
Voici la manip sous notepad :

La première regex (.*) prend en compte tout ce qui se trouve avant " : ", la deuxième (.*) c’est le texte entre " : " et 2010. L’utilisation des parenthèses () va nous permetre de rappeler la regex dans le "remplacer par". Comme je veux garder la 2ème regex, je mets "\2" dans remplacer par, ce qui me donne en appuyant sur remplacer tout :
- jeanviet
- février
- mars
- avril
Si j’avais mis \1 à la place, j’aurais eu la 1ère regex, soit :
- mois
- mois
- mois
- mois

8 exemples pratiques de rechercher et remplacer par

- Enlever les espaces en fin de mot
- Mettre tout en minuscule ou tout en majuscule
- Supprimer des lignes vides
- Filtrer ses données : copier ou supprimer les lignes marquées
- Transformer une colonne d’adresse emails en 1 ligne avec séparateurs (virgules)
- Mettre des données en colonnes : saut de ligne à chaque séparateur
- Ajouter du code HTML
- Supprimer du code HTML


1. Enlever les espaces en fin de mots

En récupérant des données, il m’arrive fréquemment d’avoir à faire face à ce problème : l’export a ajouté des espaces en fin de cellule… Comment effacer ces espaces juste en fin de cellule et pas entre deux mots ?
Copiez-collez vos données dans notepad++
- mois de jeanviet
- mois de février
- mois de mars
- mois d’avril
CTRL + H, puis ajouter dans rechercher " $" (tout ce qui se termine par espace : espace suivi de $) et rien dans Remplacer par.

Remplacer tout, et le tour est joué !
- mois de jeanviet
- mois de février
- mois de mars
- mois d’avril
NB : on peut aussi faire Edition -> enlever les espaces/tabulations à la fin de la ligne (mais ça claque moins ;-))

2. Mettre tout en minuscule / majuscule

Notepad++ a créé des fonctions magiques automatiques pour résoudre vos problèmes de majuscules / minuscules. Toutes ces fonctions se trouvent sous TextFX -> TextFX Characters dans le menu horizontal de Notepad++. Assurez-vous que tout votre texte soit sélectionné au préalable (CTRL + A)

UPPER CASE met tout en majuscule
- MOIS DE JEANVIET
- MOIS DE FÉVRIER
- MOIS DE MARS
- MOIS D’AVRIL
lower case met tout en majuscule
- mois de jeanviet
- mois de février
- mois de mars
- mois d’avril
Sentence case rajoute une majuscule en début de phrase (la phrase doit se terminer par un point)
- Mois de jeanviet.
- Mois de février.
- Mois de mars.
- Mois d’avril.

RDV ici : TextFX -> TextFX Edit et appuyez sur Delete Blank Lines (supprimer les lignes vides)


Si je veux exporter que des lignes qui parlent de jeanviet, on va procéder en 2 temps marquer les lignes qui parlent de jeanviet (1) puis les copier-coller (2)
Pour marquer les lignes, faites CTRL + F, ajoutez le texte jeanviet (1), cochez marquer les lignes (2), et appuyez sur rechercher tout (3).

Toutes les lignes contenant jeanviet sont alors marquées

Dans le menu horizontal recherche, vous pouvez alors effectuer différentes actions sur les lignes marquées :

Les Copier, pour les coller ailleurs… je n’aurai que du jeanviet

Les Supprimer, adieu jeanviet !


5. Transformer une colonne d’adresse emails en 1 ligne avec séparateurs (virgules)

Vous avez récupéré ces adresses mail via un tableur excel ou votre outil de blogging, elles sont ordonnées en colonne :
- julien@jeanviet.info
- jules@jeanviet.info
- jeremy@jeanviet.info
- jordan@jeanviet.info
- jean@jeanviet.info
- jonathan@jeanviet.info
- jason@jeanviet.info
- jimmy@jeanviet.info
- joris@jeanviet.info
- jean-baptiste@jeanviet.info
- johan@jeanviet.info
Si vous voulez leur envoyer tous un mail, il faut les séparer par des virgules et les mettre sur la même ligne, rien de plus simple avec notepad++
On fait CTRL + H, on coche la case Mode étendu (mode regex qui comprends les caractères spéciaux) dans recherche je mets \r\n (\r c’est la fin de ligne - équivalent de notre $ en mode expression régulière - \n c’est le retour à la ligne), dans remplacer par je mets une virgule ","

On peut ensuite appuyez sur remplacer tout

Miracle ! ça fonctionne, je n’ai plus qu’à copier-coller cette ligne dans la zone destinataire de ma messagerie préférée.

6. Mettre des données en colonne (séparateur devient saut de ligne)

La réciproque de ce qu’on vient de voir avant est tout à fait possible à réaliser.

Il suffit de mettre la virgule dans recherche et le saut de ligne (\r\n) dans remplacer par… C’est aussi simple que ça


Ca devient un peu technique là… Pour que cela soit profitable au plus grand nombre, je vous propose de voir comment on peut tranformer des images hébérgées sur le web en miniatures cliquables…. Ci-dessous les urls qui chargent les photos des 12 membres les plus actifs de jeanviet.info :
- http://jeanviet.info/about/jeanviet.jpg
- http://jeanviet.info/about/cedric.jpg
- http://jeanviet.info/about/emilie.jpg
- http://jeanviet.info/about/daria.jpg
- http://jeanviet.info/about/tdj.jpg
- http://jeanviet.info/about/ptitfred.jpg
- http://jeanviet.info/about/justin.jpg
- http://jeanviet.info/about/furious.jpg
- http://jeanviet.info/about/sonja.jpg
- http://jeanviet.info/about/bigfoot.jpg
- http://jeanviet.info/about/cc69.jpg
- http://jeanviet.info/about/ziharmo.jpg
On va les copier-coller dans notepad++

Chaque image fait 83×97 en taille, on va en faire des miniatures cliquables de 40×47 (on garde la proportion, on diminue la taille), le lien ouvrira une nouvelle fenêtre.
On doit donc transformer ça :
http://jeanviet.info/about/jeanviet.jpg
en ça :
<a href="http://jeanviet.info/about/jeanviet.jpg" target="_blank"><img src="http://jeanviet.info/about/jeanviet.jpg" hspace="3px" width="40px"></a>
visuellement ça donne ça


On se lance ce n’est pas très compliqué ;- ) surtout que je vous ai donné le code html qui va bien avant

Dans rechercher on va ajouter (.*) et dans remplacer par, vous reprenez mon code en bleu, ce qui est en vert devient \1

Appuyez ensuite sur remplacer tout… le code est prêt, plus qu’à le copier-coller en mode html sur votre blog comme ceci :


C’est quand même plus sympa qu’une liste brute d’urls !


Si on veut revenir à l’affichage brut d’urls à partir du dernier code html généré, voici ce qu’il faut ajouter dans les champs rechercher et remplacer en mode expression régulière.

On veut récupérer la 2ème expression regulière dans le href=" ", soit \2 dans remplacer par… Et on retrouve ainsi notre liste d’urls :


Quelques liens pour aller encore plus loin

Avec les regex, les gains de productivité sont infinis ! il y a des regex dont je n’ai pas parlé… des usages plus avancées à explorer, si vous souhaitez aller plus loin, voici quelques liens utiles :
- Tuto vidéo pour connaître les sites qui pointent le plus souvent chez vous (en utilisant notepad++, des regex, et calc)
- Expreg : si vous voulez vous lancer dans le développement php
- D’autres exemples de regex pour Notepad++ (en anglais)
Autrement, vous pouvez aussi utiliser le forum logiciel pour poser toutes vos questions regex / notepad++
Vous avez aimé ce tutoriel ?
» Rechercher et remplacer du texte avec Notepad++ et quelques regexPartagez-le sur :
Vous aimerez aussi ces autres tutos :
A propos de l'auteur : jeanviet
Salut à tous, je m'appelle Jean-Baptiste, j'ai 30 ans et je suis le Webmaster de Jeanviet.info / votre guide web et multimédia gratuit et accessible à toute la famille ! Sur ce blog, je partage avec vous tous les sites web, logiciels, techniques qui permettent de personnaliser vos interfaces et supports multimédia : blog, photos, bureau, site, mobile,…











Pour ma part en format ANSI j’ai un fichier contenant beaucoup de caractère nul écrit NUL (en fond noir) comme on peut le voir sur cette image “http://image-heberg.fr.cr/files/1258915036313330.jpg” connaisez vous un moyen quel qu’il soit pour remplacer ou ne pas afficher ce caractère?
Merci d’avance
Je souhaite trouver dans un dossier tous les fichiers contenant 2 mots spécifiques.
Est ce qu’il y a une solution avec notepad++ et “Rechercher dans les fichiers” ?
Merci pour votre réponse.
Contrairement à ce qui est écrit, je n’arrive pas à utiliser le mode étendu avec des expressions régulières.
Je voudrais supprimer toutes les occurrences de “\n 0…..\n” de mon fichier, et je ne vois pas comment faire. Le mode expressions régulières ne gère pas les retours de lignes “\n” et le mode étendu ne gère pas les “…” comme une expression régulière.
Blaze!
Merci pour cet article qui en deux lecture m’a permis de faire l’expression que je cherchais à faire depuis un moment
ex:
text1;text2;text3;text4
Et je voudrai avoir comme ceci:
text1
text2
text3
text4
Je souhaite utiliser des adresses mail en colonnes pour lesquelles je dois ajouter une virgule comme expliqué dans le point 5, à la grosse différence que je veux et ne peux le faire que sur Word !
Avez-vous une technique à me soumettre,
Merci beaucoup de votre réponse,
Valérie
5. Transformer une colonne d’adresse emails en 1 ligne avec séparateurs (virgules)
Vous avez récupéré ces adresses mail via un tableur excel ou votre outil de blogging, elles sont ordonnées en colonne :
Bonjour, j’aurais besoin de remplacer les espaces entre les mots par un tiret (-), mais pas les espaces entre mot et chiffre, chiffre et mot, chiffre et chiffre.
Merci à celui qui me donnera la bonne expression
Laurent
recherche:
([^0123456789]) ([^0123456789])
remplacer:
\1-\2
en mode expression régulière.
Voilà, si j’ai bien compris la question du moins.
Nicolas
[Toto titi tata]
Il s’agit d’un fichier de sous-titrage SRT et je voudrais supprimer tous les commentaires qui sont justement entre crochets. Il me faudrait supprimer le texte et les crochets. Est-ce possible à votre avis ?
Il faut le faire en 2 étapes
en mode normal, remplace tous les [ et ] par _
[Toto titi tata] devient ainsi _Toto titi tata_
en mode expression régulière, remplace _.*_ par rien
Ca devrait effacer tout ce qui est entre “_”
J’ai trouvé votre article très intéressant. Toutefois je n’arrive pas à reproduire ce que vous décrivez dans la 4ème partie. J’arrive sans problème à marquer les lignes contenant une chaine de caractères mais je ne trouve nulle part la possibilité de copier ou de supprimer les lignes marquées.La version de Notepad ++ que j’utilise est la 5.9.3.
Pour info : sous word, remplacer ^p par ; permet de transformer une colonne en paragraphe avant un envoi de mail par exemple…
Bertrand
merci
Il suffit de placer un anti-slash \ avant le caractère que vous souhaitez dénaturé. Ainsi il ne fait plus partie de votre expression régulière comme un opérateur mais est identifié comme un caractère simple.
Le résultat peut donc être obtenu avec :
\[[A-Za-z ]*\]
@Zenike
Avec ta formule, tu remplaces les espaces entres nombres par un -, et si j’ai bien compris on veut exactement le contraire, c’est à dire remplacer :
([A-Za-z]+) ([A-Za-z]+)
par :
\1-\2
A savoir :
Si vous voulez décrire des ensembles c’est possible. C’est ce que j’ai fais juste au dessus.
[0-9] veut dire tout les chiffres possibles.
[a-z] toutes les minuscules.
Et le + veut dire “au moins un” (là où le plus inclut le 0)
Bon courage avec les regex ! Plus vous les utiliserez, plus ça deviendra puissant
Récupérant de vieux contacts, j’ai besoin d’un fichier texte propre : un mail par ligne.
Quel code me faut-il utiliser pour supprimer un ensemble tel que :
AXXXXX sXXXX etc… <XXXXX@laposte.net
se retrouve ainsi :
XXXXX@laposte.net
Cad remplacer tous les caractères devant et y compris le signe “<”
Merci d’avance (je débute avec ces fonctions notepad)
^([A-Za-z0-9àáâãäåçèéêëìíîïðòóôõöùúûüýÿ& -_]+)(<)
Merci de m’avoir guidé dans cet apprentissage.
Autres sources :
http://www.commentcamarche.net/forum/affich-1314348-regular-expression-et-accents
http://nliautaud.fr/wiki/articles/notepadpp/expreg
.* <
. signifiant un caractère quelconque.
* signifiant un certain nombre (supérieur ou égale à 0)
On peut donc traduire la regexp par “n’importe quoi suivi d’un espace et d’un chevron ouvrant”.
Merci pour les liens
L’espace est même alors inutile (expérience faite)
.*<
“n’importe quoi suivi d’un chevron ouvrant”.
Histoire d’aller plus loin :
Je pars d’un ensemble de données sur une seule ligne (récup de mail) du genre :
xxx yyy , ssss dddd , etc…
Jusqu’alors, je fais en 2 étapes, d’abord :
“>, ” remplacé par”\n” (donc un retour à la ligne en fin de chaque adresse mail) puis j’utilise ton code “.*<” remplacé par rien. Et j’obtiens une adresse mail par ligne.
Peut-on imaginer faire tout ça en une seule manipulation ?
(bon sinon ces 2 étapes me contentent déjà énormément. MERCI !)
A toute personne qui connait la réponse, n’hésitez pas !
Donnez la réponse ! (ou au moins un lien
J’utilise “\n” dans le regexp de Notepad++ justement. (si telle est la question)
Donc en effet pour en revenir à ton problème on peut se démerder avec une seule regexp.
Le texte de base
azr eza , aoihr zrze , aoihr zrze
On recherche :
[[,a-z ]*]*
Que l’on remplace par
\1\n
Dans ce cas là, on ne peut plus utiliser le . parce qu’il inclue les caractères . Cela dit il existe peut-être une façon de définir des ensembles en soustrayant certains éléments pour faire ça de façon plus simple … A chercher
Je réessaye
[[,a-z ]*##([,a-z@ 0-9]*)##]*
A la place de ## tu dois mettre tes chevrons ouvrants et fermants
2ème tentative :
[[,a-z ]*<([,a-z@ 0-9]*)>]*
azr eza <toto1>, aoihr zrze <toto2>, aoihr zrze <toto3>
La regexp :
[[,a-z ]*<([,a-z@ 0-9]*)>]*
A remplacer par
\1\n
Ben c’était pour décorer d’une cerise sur le gateau, mais une succession de “>, ” par “\n” puis de “.*<” par rien marche impeccablement bien.
Merci de tes efforts
J’ai regarder les liens que tu as mis dans l’un des tes messages, pour en déduire :
[^<]*]*)>
\1\n
Je traduis :
[^ N'importe quoi sauf le chevron ouvrant.
]*)> => N’importe quoi sauf le chevron fermant, et entouré d’un chevron ouvrant à gauche et d’un fermant à droite.
Bingo
Remplacer :
[^<]*<([^>]*)>
par :
\1\n
Traduction :
[^<]* N’importe quoi sauf le chevron ouvrant.
<([^>]*)> => N’importe quoi sauf le chevron fermant, et entouré d’un chevron ouvrant à gauche et d’un fermant à droite.
C’est impeccable et j’en prends bonne note.
Un GRAND MERCI pour ta ténacité
Je cherche a fusion plusieurs fichier txt en un seul, dans chaque fichier il n’y a qu’une seule ligne que je veut mettre l’une en dessous de l’autre dans un fichier unique
Merci de votre aide