【问题标题】:Sublime Text - Regular Expression for search and replaceSublime Text - 用于搜索和替换的正则表达式
【发布时间】:2013-09-02 13:07:19
【问题描述】:

我想用正则表达式的搜索和替换来转换以下文本:

“一些文本我不关心\cite[p. 6]{some-bibtex-citation} 一些文本我更不关心 \cite[p. 321 / 4]{and-another-citation-from-bibxtex} 和更多文本。”

进入这个:

“有些文字我不关心[\citem{author}{some-bibtex-citation}, p. 6] 一些文字我更不关心[\citem{author}{and-another-citation-from-bibxtex}, p. 321 / 4] 和更多文字。”

如您所见,所有出现的 \cite 都被替换为不同的。它们现在被 [ 和 ] 包围,并且都以 [citem{author}

开头

我尝试了以下搜索正则表达式,它基本上可以工作,但一次可以选择太多文本:

\\cite\[(.+)\]\{(.+)\}

我使用的替换正则表达式是:

[\\citem{author}{\2}, \1]

【问题讨论】:

  • “但可以同时选择太多文本”是什么意思?
  • 它应该选择直到结束花括号。例如:它应该在 -citation} 之后停止,但它也会选择后面的文本(“一些更多的文本......”)

标签: regex sublimetext2


【解决方案1】:

更改您的正则表达式,使 .+ 变得懒惰:

\\cite\[(.+?)\]\{(.+?)\}
           ^        ^

使贪婪的量词变得惰性意味着不是尽可能多地匹配,而是尽可能少地匹配。在您当前的正则表达式中,. 将匹配所有字符,直到找到另一个 )(后跟正则表达式中的其他字符)。

或者使用否定类:

\\cite\[([^\]]+)\]\{([^}]+)\}

【讨论】:

  • 有些人可能会称这种“懒惰”评估为非贪婪
  • 否定类是我的用例所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多