如何删除数字后的后续字符并保留数字?正则替换求助
解决Vim替换时保留数字的问题
哈哈,我懂你的困扰!你用的%s/[0-9].*//g会把数字和后面的内容一起删掉,是因为这个正则表达式的意思是“匹配从任意数字开始到行尾的所有内容”,自然连数字本身也被包含进去了。
给你几个可行的解决方案:
方案一:使用分组保留数字
这个方法通过括号把需要保留的数字分组,替换时引用这个分组:
%s/\([0-9]\)\D* /\1 /g
\([0-9]\):把匹配到的数字捕获成一个分组\D*:匹配数字后面所有非数字的字符/\1 /:替换成捕获到的数字加空格,这样就保留了数字,只删掉后面的单词
方案二:用\zs简化写法
Vim正则里的\zs可以指定匹配的起始位置,意思是“只替换\zs之后的内容”,前面的内容会自动保留:
%s/\d\zs\D* //g
\d:等价于[0-9],匹配单个数字\zs:标记替换的起始点,数字本身不会被替换\D*:匹配数字后所有非数字字符加空格,确保替换后数字间只有单个空格
如果你的内容是每行一个数字加单词(比如1sum单独一行),可以去掉命令里的空格,改成:
%s/\d\zs\D*//g
举个实际效果的例子:
输入内容:1sum 2subtract 3multipy 4divide
执行命令后输出:1 2 3 4
内容的提问来源于stack exchange,提问作者VKJ
相关产品推荐
相关产品推荐

