I am writing a paper with latex and accidentally wrote \cite[]
instead of \cite{}
.
I could just go over the whole document by hand but I want to know how to do this in notepad++ using regexes.
I initially tried \\cite\[(.*)\]
and replace with \cite{\1}
which works for simple cases such as
\cite[hello world] blah blah
However if there are two or more citations in a paragraph it matches all of them. So for example
\cite[aaa]\cite[bbb] something here \cite[ccc]
matches the whole line
How can I get a non greedy match so that the above line would be matched as 3 separate matches and the result of a replace command should give me
\cite{aaa}\cite{bbb} something here \cite{ccc}
Use a reluctant (aka non-greedy) expression:
The addition of the question mark changes the
.*
from greedy (the default) to reluctant (non-greedy), which means it will consume as little as possible to find a match, which means it won't skip over multiple search terms such that it matches using the open square bracket if the first cite and the closing square bracket of the last cite.See a live demo of this regex working with the sample in the question.
Better to use a more precises expression in the first place:
\\cite\[([^[\]]*)\]
You must be using Notepad++ version 6 or higher (they upgraded to the PCRE regex engine at V6).