正则表达式搜索替换Sublime Text 2

时间:2012-08-05 20:38:28

标签: regex replace sublimetext2

我希望在Sublime Text 2中使用正则表达式进行搜索替换。documentation on this相当贫乏。具体来说,我想对组进行替换,所以比如转换这个文本:

Hello my name is bob

这个搜索词:

找到:my name is (\w)+

替换为:my name used to be $(1)

搜索词工作正常,但我无法找到使用regexp组实际替换的方法。

6 个答案:

答案 0 :(得分:534)

对于第一个捕获组(括号中的模式的第一个匹配),反向引用通常为$1\1(反斜杠为1)。所以也许试试:

my name used to be \1

my name used to be $1

<强>更新 有几个人指出,你的原始捕获模式是不正确的,只会捕获名称的最后一个字母而不是整个名称。您应该使用以下模式来捕获名称的所有字母:

my name is (\w+)

答案 1 :(得分:100)

顺便说一句,在上面的问题中:

有关:

Hello, my name is bob

查找部分:

my name is (\w)+

使用替换部分:

my name used to be \1

会回来:

Hello, my name used to be b

将查找部分更改为:

my name is (\w+)

替换将是您所期望的:

Hello, my name used to be bob

虽然(\ w)+将匹配“bob”,但它不是您想要替换的分组。

答案 2 :(得分:44)

  

在搜索字符串中使用()括号

有一点需要强调!您希望在替换字符串中使用的所有<搜索字符串中匹配的细分必须包含在()括号中,否则这些匹配的细分受众群无法使用$ 1,$ 2,...等数据进行访问,也不能使用\ 1,\ 2,..等等。

实施例

我们想要取代&#39; em&#39;与&#39; px&#39;但保留数值:

margin: 10em
margin: 2em

因此我们使用margin: $1px作为替换字符串。


正确:$1括号括起所需的( )匹配段,如下所示:

查找:margin: ([0-9]*)em(带括号)

替换为:margin: $1px

结果:

margin: 10px
margin: 2px

错误:以下正则表达式模式将匹配所需的行,但匹配的段在替换字符串中不可用作$1等变量:

查找:margin: [0-9]*em(没有括号)

替换为:margin: $1px

结果:( $1未定义)

margin: px
margin: px

答案 3 :(得分:42)

以下是批准答案的直观演示。

enter image description here

答案 4 :(得分:20)

请注意,如果您使用9个以上的捕获组,则必须使用语法${10}

$10\10\{10}工作。

答案 5 :(得分:0)

Sublime Text Unofficial Documentation's article on Search and Replace,看来+(.+)是您可能想要的捕获组...但是我个人使用了(.*),它运作良好。以您所说的方式替换,您可能会喜欢conversation in the forums,特别是this post,它表示只需使用$1来使用第一个捕获的组。

而且由于图片胜于文字...

之前before find/replace

之后: after find/replace