Vim非贪心搜索

时间:2012-09-07 01:40:12

标签: vim

我正在尝试将所有内容删除到csv文件中每行的第一个逗号。 这些线条如下:

-29.45829963684082~149.14680480957031,-000029.45829963684082, 000149.14680480957031,WGS84
-29.46190071105957~149.09509277343750,-000029.46190071105957, 000149.09509277343750,WGS84

当我执行%s/.*,\\{-}//时,它会删除所有内容!

如果我使用%s/.*,//,它会删除WGS84以外的所有内容,这是我所期望的。

谁能告诉我我做错了什么?我认为\{-}在Vim中强加了非贪婪的匹配。

谢谢,

约翰

4 个答案:

答案 0 :(得分:3)

我只会使用[^,]*代替.*。这将使你的正则表达式不贪逗逗号。

就你的变体不起作用的原因而言,你的正则表达式中的对象似乎是错误的。 {-}应该等同于*,但非贪婪,并且已经使用*尽可能多地吸收。你那里也有太多的反斜杠。尝试:

:%s/.\{-},//

代替。

当我在测试输入上执行此操作时,我得到:

-000029.45829963684082, 000149.14680480957031,WGS84
-000029.46190071105957, 000149.09509277343750,WGS84

正如所料。

答案 1 :(得分:3)

\{-}是Vim中的非贪婪匹配,因此您应该使用\{-}代替*

尝试:

%s/.\{-},//

答案 2 :(得分:2)

另一条路线是使用全局命令。

:g//normal dt,

答案 3 :(得分:1)

这是你需要做的事情

%s/[^,]*//