我认为这是一个非常简单的解决方案,但我一直试图找到大约一个小时的答案,似乎无法弄明白。
我正在尝试在Vim中进行查找/替换,以替换以103
开头的一系列数字,然后是四位数到123
,后跟相同的四位数字,如这样:
1033303
- > 1233303
1033213
- > 1233213
我最接近的是:
%s/103\d\{4}/123\0/g
然而,这导致整个号码与\0
匹配,因此:
1033303
- > 1231033303
非常感谢您的帮助
答案 0 :(得分:26)
你非常接近
%s/103\(\d\{4}\)/123\1/g
\(
和\)
之间的模式是一个子匹配,可以按\1
,\2
等按出现顺序访问。有关详细信息,请参阅:help \(
。
答案 1 :(得分:7)
现在没有捕获组!
:%s/103\ze\d\{4}/123/g
\ze
将设置匹配结束。这允许您匹配整个模式,但只对其中的一部分进行替换。
:h /\ze
:h /\zs
答案 2 :(得分:3)
使用捕获组:
%s/103\(\d\{4}\)/123\1/g
答案 3 :(得分:1)
试试这个:
%s#103\(\d\{4}\)#123\1#g