我希望在Sublime Text 2中用正则表达式做搜索替换。关于这方面的文档相当贫乏。具体来说,我想在组上做一个替换,比如转换这个文本:

你好,我叫鲍勃

这个搜索词是:

我的名字是(\w)+

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

搜索词工作得很好,但我想不出使用regexp组实际执行替换的方法。


当前回答

通常,对于第一个捕获组(括号中模式的第一个匹配),反向引用是$1或\1(反斜杠1),实际上Sublime支持这两种语法。所以尝试:

my name used to be \1

or

my name used to be $1

还要注意您原始的捕获模式:

my name is (\w)+

是不正确的,将只捕获名称的最后一个字母,而不是整个名称。您应该使用以下模式来捕获名称的所有字母:

my name is (\w+)

其他回答

我也遇到过类似的问题:

很多条纹都是这样的 Don Jos6去了(正确的是Don José去了)

我使用了这个工具: https://coding.tools/regex-replace

正则表达式:([a-z]

替换为:$1é

点击“Regex Replace”按钮。 结果:

Don José去了

它也适用于谷歌表。

注意,如果您使用超过9个捕获组,则必须使用语法${10}。

$10或\10或\{10}都不行。

看看Sublime Text非官方文档关于搜索和替换的文章,看起来+(.+)是你可能想要的捕获组…但我个人使用(.*),它工作得很好。用你所说的方式来替换,你可能会喜欢论坛上的这个对话,特别是这篇文章,它说只需使用1美元就可以使用第一个捕获的组。

既然图片比文字更好……

之前:

后:

通常,对于第一个捕获组(括号中模式的第一个匹配),反向引用是$1或\1(反斜杠1),实际上Sublime支持这两种语法。所以尝试:

my name used to be \1

or

my name used to be $1

还要注意您原始的捕获模式:

my name is (\w)+

是不正确的,将只捕获名称的最后一个字母,而不是整个名称。您应该使用以下模式来捕获名称的所有字母:

my name is (\w+)

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

For:

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”,但它不是你想要替换的分组。