在vim中使用正则表达式进行查找和替换:将.0添加到数字中

Nil*_*ils 3 regex vim

我有一个文件,如下所示.

1   1  0  #  1 
6   1  0  #  2 
8   1  0  #  3 
10  1  0  #  4 
12  1  0  #  6 
Run Code Online (Sandbox Code Playgroud)

如何将#0添加到所有数字,除了#后面的数字.我认为使用正则表达式不应该太难,但我的正则表达式知识太生锈了.

Pet*_*den 8

使用VIM:

:%s/\v(#.*)@<!\d+/&.0/g
Run Code Online (Sandbox Code Playgroud)

说明:\v=非常神奇(参见参考资料help \v),@<!如果前面的原子在后面的内容之前不匹配,则匹配零宽度(参见参考资料help \@<!).该模式的其余部分将使用相同的字符串替换1个或更多数字的字符串.0.


pax*_*blo 7

如果您的号码后面#没有空格,您可以使用:

:g/\([0-9]\+\) /s//\1.0 /g
Run Code Online (Sandbox Code Playgroud)

使用()创建组可以\D在替换文本中引用,其中D组是搜索字符串中的位置.这会给你:

1.0   1.0  0.0  #  1
6.0   1.0  0.0  #  2
8.0   1.0  0.0  #  3
10.0  1.0  0.0  #  4
12.0  1.0  0.0  #  6
Run Code Online (Sandbox Code Playgroud)

如果他们这样做有他们之后空格(你似乎有),你会得到:

1.0   1.0  0.0  #  1.0
6.0   1.0  0.0  #  2.0
8.0   1.0  0.0  #  3.0
10.0  1.0  0.0  #  4.0
12.0  1.0  0.0  #  6.0
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以这样做:

:g/\.0\(  *\)$/s//\1/g
Run Code Online (Sandbox Code Playgroud)

解决它.