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:
\\cite\[(.*?)]
See a live demo.
The addition of the question mark changes the .*
from greedy (the default) to reluctant so it will consume as little as possible to find a match, ie it won't skip over multiple search terms matching start of one term all the way to the end of another term.
ie using .*
the match would be
foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
^----------------------1---------------------^
but with .*?
the matches would be:
foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
^---1----^^----------------2-----------------^
Minor note: ]
does not need escaping.