You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除数字后的后续字符并保留数字?正则替换求助

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:02:32