37

How can I replace several different words all at once in Notepad++?

For example;

I have "good", "great" and "fine" and I want to replace them with "bad", "worse" and "not", respectively, all at once.

I know that I can replace them one by one, but the problem I am facing requires that I replace a lot of words, which is not convenient to do.

4 Answers 4

72

Try a regular expression replace of (good)|(great)|(fine) with (?1bad)(?2worse)(?3not).

The search looks for either of three alternatives separated by the |. Each alternative has its own capture brackets. The replace uses the conditional form ?Ntrue-expression:false-expression where N is decimal digit, the clause checks whether capture expression N matches.

Tested in Notepad++ 8.5.8 (and previously in Notepad++ 6.3).

Since this answer was first written the Notepad community has created the Notepad++ Online User Manual and it contains a good description of the Substitution Conditionals used here.

The replacement string above can be extended to have replacements for the false-expressions. For example (?1bad:[1])(?2worse:[2])(?3not:[3]). These false expressions are not very useful, but they provide a demonstration of what is happening in each replacement. Using this replacement on the string:

+good+great+fine+

yields the result:

+bad[2][3]+[1]worse[3]+[1][2]not+

The original answer includes the information below. The three links checked and are still valid on 2024-01-02, the ZIP file was not checked:

You can find good documentation, about the new PRCE Regular Expressions, used by N++, since the 6.0 version, at the TWO addresses below :

http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html

The FIRST one concerns the syntax of regular expressions in SEARCH

The SECOND one concerns the syntax of regular expressions in REPLACEMENT

And, if you can understand "written French", I made a tutorial about PCRE regular expressions, stored in the personal site of Christian Cuvier (cchris), at the address below :

http://oedoc.free.fr/Regex/TutorielRegex.zip

(Extracted from a posting by THEVENOT Guy at http://sourceforge.net/p/notepad-plus/discussion/331754/thread/ca059a0a/ )

5
  • Amazing! Could you add the source? I could not find this anywhere in the documentation. I use notepad++'s regex replace frequently and I'm curious if I could get more some cool stuff
    – Rishi Dua
    Commented Jun 18, 2013 at 8:10
  • index start at 0 for me in 6.4.5 Commented Feb 18, 2014 at 20:09
  • awesome never knew about this, use notepad++ for regex replace constantly.
    – OGHaza
    Commented Mar 12, 2014 at 16:45
  • This is awesome! But, do you know how to make it use the output of the previous search/replace for the next one? I assumed that's what it was doing because of the |, but it's not.
    – Patches
    Commented Sep 18, 2014 at 14:45
  • But how could we do this for a huge list? I have about 100 elements separated by ,'s and the other list separated by a comma too. Commented Mar 14, 2017 at 18:25
32

Install Python Script plugin from Plugin Manager.

Create a file with your substitutions (e.g., C:/Temp/Substitutions.txt), separate values with space:

good bad
great worse
fine not

Create a new script:

with open('C:/Temp/Substitutions.txt') as f:
    for l in f:
        s = l.split()
        editor.replace(s[0], s[1])

Run the new script against the text you want to substitute.

3
  • 1
    Works well for simple search and replace. Doesn't work if the things to be replaced are regex itself.
    – Rishi Dua
    Commented Jun 18, 2013 at 8:03
  • 3
    @Rishi For the purposes of this question simple search replace was enough. Regex search replace can be achieved by using editor.rereplace(s[0], s[1]) instead. Or even better editor.pyreplace to leverage full Python regex support. Commented Jun 24, 2013 at 13:39
  • How do I run this Python script across multiple files in NotePadd++? Commented May 17, 2016 at 11:38
2

I needed to run the substitution on several files. Based on Mauricio Morales's answer, I created the following script.

with open('C:/Temp/Substitutions.txt') as f:
    files = notepad.getFiles()
    for file in files:
        notepad.activateFile(file[0])
        for l in f:
            s = l.split()
            editor.replace(s[0], s[1])
        f.seek(0) # Reset file input stream
-1

If you're replacing the same words in several different files all the time, recording your action once using these buttons and saving it as a macro will be helpful. *Notepad++

1
  • What do you mean by "*Notepad++"? Commented Feb 3, 2023 at 3:25

Not the answer you're looking for? Browse other questions tagged or ask your own question.