regex - 如何在 Notepad++ 中进行非贪婪的正则表达式查询?

标签 regex notepad++

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

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

\cite[hello world] blah blah 

但是,如果段落中有两个或多个引用,则它匹配所有引用。
所以例如
\cite[aaa]\cite[bbb] something here \cite[ccc]

匹配整行

如何获得非贪婪匹配,以便将上述行匹配为 3 个单独的匹配项
并且替换命令的结果应该给我
\cite{aaa}\cite{bbb} something here \cite{ccc}

最佳答案

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

\\cite\[(.*?)] 
live demo .
添加问号会更改 .*从贪婪(默认)到不情愿,因此它会尽可能少地寻找匹配项,即它不会跳过与一个词的开头匹配的多个搜索词一直到另一个词的结尾。
即使用.*比赛将是
foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
    ^----------------------1---------------------^
但与 .*?比赛将是:
foo \cite[aaa]\cite[bbb] something here \cite[ccc] bar
    ^---1----^^----------------2-----------------^

小注:]不需要逃避。

关于regex - 如何在 Notepad++ 中进行非贪婪的正则表达式查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415871/

相关文章:

java - 拆分字符串多种模式

Java 字符串验证

Notepad++语法高亮显示: How to treat a user-defined language as built-in?

正则表达式:将单词开头的 <tags> 中的小写字母替换为大写字母

Notepad++ 多重编辑

regex - 如何使用正则表达式删除 2 行模式之间的行?

java分隔符错误

python - 部分替换为 re.sub()

c# - 只匹配c#字符串中的正则表达式

encoding - 如何在 Notepad++ 中将文件的编码转换为 ISO-8859-1?