11

我正在用乳胶写一篇论文,但不小心写成\cite[]\cite{}. 我可以手动浏览整个文档,但我想知道如何在 notepad++ 中使用正则表达式来做到这一点。

我最初尝试\\cite\[(.*)\]并替换\cite{\1}which 适用于简单的情况,例如

\cite[hello world] blah blah 

但是,如果段落中有两个或多个引用,则它匹配所有引用。所以例如

\cite[aaa]\cite[bbb] something here \cite[ccc]

匹配整行

如何获得非贪婪匹配,以便将上述行匹配为 3 个单独的匹配项,并且替换命令的结果应该给我

\cite{aaa}\cite{bbb} something here \cite{ccc}
4

2 回答 2

32

使用不情愿(又名非贪婪)表达式:

\\cite\[(.*?)] 

观看现场演示

添加问号将.*贪婪(默认)更改为不情愿,因此它会尽可能地寻找匹配项,即它不会跳过匹配一个词的开头的多个搜索词一直到结尾另一个术语。

即使用.*比赛将是

foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
    ^----------------------1---------------------^

.*?比赛将是:

foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
    ^---1----^^----------------2-----------------^

小提示:]不需要转义。

于 2013-08-24T06:54:57.483 回答
1

最好首先使用更精确的表达式:

\\cite\[([^[\]]*)\]

您必须使用 Notepad++ 版本 6 或更高版本(它们已升级到 V6 的 PCRE 正则表达式引擎)。

于 2013-08-24T15:44:16.597 回答