Astuces et Tutoriaux gratuits Web, PC, Mobile

accueil astuces
 » 29 janusiens en ligne| Vous êtes ici : Les Astuces de Jeanviet - Rechercher et remplacer du texte avec Notepad++ et quelques regex 

Rechercher et remplacer du texte avec Notepad++ et quelques regex

Ajoutée dans Bureautique, Webmaster, le 11/11/09,

Rechercher et Remplacer par...

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:

  1. Télécharger Notepad++
  2. Rechercher et Remplacer par dans Notepad++
  3. Notepad++ et les expressions régulières
  4. 8 exemples pratiques de rechercher et remplacer par
  5. Quelques liens pour aller encore plus loin !

Télécharger Notepad++

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.

Notepad++ 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

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

C’est quoi les regex ?

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 :

Conserver une regex

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

  1. Enlever les espaces en fin de mot
  2. Mettre tout en minuscule ou tout en majuscule
  3. Supprimer des lignes vides
  4. Filtrer ses données : copier ou supprimer les lignes marquées
  5. Transformer une colonne d’adresse emails en 1 ligne avec séparateurs (virgules)
  6. Mettre des données en colonnes : saut de ligne à chaque séparateur
  7. Ajouter du code HTML
  8. 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.

Enlever espace en fin de ligne

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)

majuscules / minuscules

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.

 

3. Supprimer des lignes vides

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

4. Filtrer ses données

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).

marquer lignes

Toutes les lignes contenant jeanviet sont alors marquées

lignes marquées

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

actions sur lignes marquées

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

copier coller lignes marquées

Les Supprimer, adieu jeanviet  ! :-(

Supprimer lignes marquées

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 ","

remplacer saut de ligne par virgule

On peut ensuite appuyez sur remplacer tout

mails sur une ligne séparés par virgule

 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.

remplacer virgule par saut de ligne

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

7. Ajouter du code HTML

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 :

 On va les copier-coller dans notepad++

images des membres de jeanviet.info

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 ;-)

ajout de code html partout

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

à mettre dans remplacer par

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 !

8. Supprimer du code HTML

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.

retrouver mon url

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 :

images des membres de jeanviet.info

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 :

  1. Tuto vidéo pour connaître les sites qui pointent le plus souvent chez vous (en utilisant notepad++, des regex, et calc)
  2. Expreg : si vous voulez vous lancer dans le développement php
  3. 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 regex

Partagez-le sur :

Vous aimerez aussi ces autres tutos :

A propos de l'auteur :

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,…




35 commentaires pour “Rechercher et remplacer du texte avec Notepad++ et quelques regex”

  1. cool a dit :
  2. je voudrais tellement le montrer a mon pere et a ma mere svp svp svp svp



  3. cool a dit :
  4. salut je veut tellement le montrer a mon pere et a ma mere jaimerais tellement ca svp



  5. runbrun a dit :
  6. juste un merci et un grand bravo.



  7. jolapatate a dit :
  8. Merci beaucoup pour ces infos.
    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 ;-)



  9. Zone Ecolo a dit :
  10. Ceci m’a été très utile ! Merci !



  11. Karine a dit :
  12. Bonjour,
    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.



  13. Hamza a dit :
  14. Merci, ca ma ete bien utile.



  15. Blaze! a dit :
  16. Argh!
    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!



  17. jeux a dit :
  18. Bonjour,

    Merci pour cet article qui en deux lecture m’a permis de faire l’expression que je cherchais à faire depuis un moment



  19. gasy a dit :
  20. Comment on ferra si on veut mettre à la ligne les textes terminant par une virgule
    ex:
    text1;text2;text3;text4
    Et je voudrai avoir comme ceci:
    text1
    text2
    text3
    text4



  21. PFS a dit :
  22. Il te suffit de faire remplacer “;” par “\r\n” en sélectionnant “Mode étendu” dans la fenêtre.



  23. valérie a dit :
  24. Bonjour,
    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 :



  25. Laurent81 a dit :
  26. (Site en cours de conception)
    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



  27. Zenike a dit :
  28. @Laurent81:

    recherche:
    ([^0123456789]) ([^0123456789])

    remplacer:
    \1-\2

    en mode expression régulière.

    Voilà, si j’ai bien compris la question du moins.

    Nicolas



  29. Watussi a dit :
  30. Merci pour cet article qui me permet d’apprécier encore plus ce bon vieux notepad++



  31. Guillaume a dit :
  32. Je cherche à supprimer du texte (des lignes de texte plus précisément) entre crochets. Par exemple :

    [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 ?



  33. Jeanviet a dit :
  34. Salut Guillaume,

    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 “_”



  35. Echidne a dit :
  36. Bonjour,
    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.



    Merci !
    Pour info : sous word, remplacer ^p par ; permet de transformer une colonne en paragraphe avant un envoi de mail par exemple…
    Bertrand



  37. pepitecool a dit :
  38. 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.
    merci



  39. Greg a dit :
  40. @Jeanviet et Guillaume:
    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 :)



  41. alcidejet a dit :
  42. Bonjour,

    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)



  43. alcidejet a dit :
  44. J’avais finalement les compétences et la débrouille! j’ai trouvé un remède efficace !

    ^([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



  45. Greg a dit :
  46. Ou sinon en plus simple
    .* <
    . 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 ;)



  47. alcidejet a dit :
  48. Super, c’est bien plus simple à faire (et à comprendre)

    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 !)



  49. Greg a dit :
  50. Malheureusement je ne sais pas s’il est possible de mettre des caractères comme le ‘\n’ dans les regexp de Notepad++.
    A toute personne qui connait la réponse, n’hésitez pas !
    Donnez la réponse ! (ou au moins un lien ;) )



  51. alcidejet a dit :
  52. Heu…
    J’utilise “\n” dans le regexp de Notepad++ justement. (si telle est la question)



  53. Greg a dit :
  54. Pardon, je me suis mal exprimé, on peut utiliser le ‘\n’ dans la chaine de remplacement, mais pas (à ma connaissance) dans celle de recherche.
    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 ;)



  55. Greg a dit :
  56. Arg, le site à coupé ma regexp :S
    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]*)>]*



  57. Greg a dit :
  58. Donc pour reprendre mon texte de base :
    azr eza <toto1>, aoihr zrze <toto2>, aoihr zrze <toto3>
    La regexp :
    [[,a-z ]*<([,a-z@ 0-9]*)>]*
    A remplacer par
    \1\n



  59. alcidejet a dit :
  60. ça n’a pas marché…

    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 :-)



  61. Greg a dit :
  62. Ah parce que tu crois que j’abandonne ? :P
    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 ;)



  63. Greg a dit :
  64. Arg, j’ai encore oublié ><

    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.



  65. alcidejet a dit :
  66. Ha oui, là Bravo!

    C’est impeccable et j’en prends bonne note.

    Un GRAND MERCI pour ta ténacité :-)



  67. dukynoob a dit :
  68. Bonjour,

    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



Laisser un commentaire


 
 
 

  

  




© Jean-Baptiste Viet: Chef de Projet Internet, Webmaster de Jeanviet.info, Créateur de Tuto Video, et Ancien Etudiant à Paris 1 Sorbonne | Design : Emilie Boudet