Vim正则表达式捕获组替换

时间:2015-07-23 08:35:39

标签: regex vim

我对Vim和正则表达式相当新。我有一个看起来像这样的文件:

parent = 0001,,,lje1 
parent 0001 = category = 0002,,,ljef
parent 0001 = category = 0003,,,ljex4
parent = 0004,,,lxen 
parent 0004 = category = 0005,,,lxvr

我希望得到最后一组数字,逗号和每行末尾的代码。如果我使用以下正则表达式:

/[0-9]*,*l[a-z0-9]*$/

它匹配每行的正确部分...数字,逗号和代码。但是,如果我尝试替换这样的话:

%s/.*\([0-9]*,*l[a-z0-9]*$\)/\1

我只是留下了这样的东西:

lje1 
ljef
ljex4
lxen 
lxvr

我想留下的是:

0001,,,lje1 
0002,,,ljef
0003,,,ljex4
0004,,,lxen 
0005,,,lxvr

如果有人知道我做错了什么,请帮忙。我搜索并检查了其他帖子,但我似乎无法找到解决方案。

干杯

2 个答案:

答案 0 :(得分:4)

只需用空字符串替换最后一个空格字符的所有字符。

/.* /

DEMO

答案 1 :(得分:1)

您需要与.\{-}进行惰性匹配,而不是.*

%s/.\{-}\([0-9]*,*l[a-z0-9]*$\)/\1