替换Sublime Text中的部分表达式?

时间:2015-06-10 23:18:06

标签: regex sublimetext

我在Sublime Text 3中使用正则表达式查找和替换功能,搜索表单(\cref{exNUMBER})(\cref{exNUMBERLETTER})的表达式例如:

(\cref{ex1})
(\cref{ex1a})

以下正则表达式可以很好地找到这些表达式:

\(\\cref\{ex(\d|\d\l)\}\)

我正在努力解决的问题是如何使用\eqref{exNUMBER}\eqref{exNUMBERLETTER}形式的表达式替换这些相同的表达式。例如,上面的例子会产生:

\eqref{ex1}
\eqref{ex1a}

我尝试过大致并行的构造\\eqref\{ex(\d|\d\l)\},但是当我替换时产生的所有构造如下:\eqref{ex(d|d)}

在Sublime Text 3中替换时使用正则表达式通配符的正确方法是什么,以便我可以(\cref{exNUMBER})(\cref{exNUMBERLETTER})分别替换\eqref{exNUMBER}\eqref{exNUMBERLETTER}

2 个答案:

答案 0 :(得分:3)

捕获您想要保留在组中的内容(这样您就可以将其放回替换中):

devise_for :users, skip: [:sessions],
                   controllers: {
                     registrations: 'users/registrations'
                   }

标记表示添加括号以捕获您想要保留为组的内容(组1)。

将匹配替换为:

\(\\c(ref\{ex(\d|\d\l)\})\)
     ^                  ^

\eq\1 后退参考到第1组 - 它会输出匹配中捕获的内容。

答案 1 :(得分:2)

波希米亚人的回答是完美的,应该是公认的答案。我只是添加了一些更简单的东西,因为我的OP正则表达式的复杂性让我发现它有点难以理解。对于更简单的情况,假设我们有一个包含以下内容的文本文件:

345
3234
23423

我们想要转换为:

{ value: 345 }
{ value: 3234 }
{ value: 23423 }

查找/替换的正确语法是:

  • 查找(\d+)
  • 替换{ value: \1 }

波希米亚人的回答非常明确地解释了这背后的逻辑,只是有更多的斜线:)。