22

我认为这是一个非常简单的解决方案,但我一直试图找到大约一个小时的答案,但似乎无法弄清楚。

我正在尝试在 Vim 中进行查找/替换,它将替换一系列以四位数字开头103并后跟123相同四位数字的数字,如下所示:

1033303-> 1233303
1033213->1233213

我最接近的是:

%s/103\d\{4}/123\0/g

但是,这会导致整个数字与 匹配\0,如下所示:

1033303->1231033303

非常感谢您的帮助

4

4 回答 4

32

你很亲密

%s/103\(\d\{4}\)/123\1/g

\(和之间的模式是一个子匹配,\)可以按出现顺序等访问。有关更多信息,请参阅。\1\2:help \(

于 2012-08-07T16:16:59.930 回答
8

现在没有捕获组!

:%s/103\ze\d\{4}/123/g

\ze将在那里设置比赛的结束。这允许您匹配整个模式,但只对其中的一部分进行替换。

:h /\ze
:h /\zs
于 2012-08-07T16:44:50.343 回答
3

使用捕获组:

%s/103\(\d\{4}\)/123\1/g
于 2012-08-07T16:17:50.040 回答
1

试试这个:

%s#103\(\d\{4}\)#123\1#g
于 2012-08-07T16:18:47.497 回答