我认为这是一个非常简单的解决方案,但我已经尝试了一个小时,仍然无法找到答案。
我正在尝试在Vim中进行查找/替换,将以103
开头并后跟四个数字的一系列数字替换为123
,后跟相同的四个数字,如下所示:
1033303
-> 1233303
1033213
-> 1233213
我最接近的方法是:
%s/103\d\{4}/123\0/g
然而,这会导致整个数字被\0
匹配,如下所示:
1033303
-> 1231033303
非常感谢任何帮助。
我认为这是一个非常简单的解决方案,但我已经尝试了一个小时,仍然无法找到答案。
我正在尝试在Vim中进行查找/替换,将以103
开头并后跟四个数字的一系列数字替换为123
,后跟相同的四个数字,如下所示:
1033303
-> 1233303
1033213
-> 1233213
我最接近的方法是:
%s/103\d\{4}/123\0/g
然而,这会导致整个数字被\0
匹配,如下所示:
1033303
-> 1231033303
非常感谢任何帮助。
你已经非常接近了
%s/103\(\d\{4}\)/123\1/g
\(
和\)
之间的模式是一个子匹配,可以通过\1
、\2
等按出现顺序访问。有关更多信息,请参见:help \(
。
现在没有捕获组了!
:%s/103\ze\d\{4}/123/g
\ze
将设置匹配的结束位置,这使得您可以匹配整个模式但只在其中一部分进行替换。
:h /\ze
:h /\zs
:%s,103\ze.*,123,g
改变分隔符(快速输入)并匹配所有后续字符使用 .*
,在替换时将被忽略。 - SergioAraujo使用捕获组:
%s/103\(\d\{4}\)/123\1/g
试试这个:
%s#103\(\d\{4}\)#123\1#g