我正在尝试将所有内容删除到csv文件中每行的第一个逗号。 这些线条如下:
-29.45829963684082~149.14680480957031,-000029.45829963684082, 000149.14680480957031,WGS84
-29.46190071105957~149.09509277343750,-000029.46190071105957, 000149.09509277343750,WGS84
当我执行%s/.*,\\{-}//
时,它会删除所有内容!
如果我使用%s/.*,//
,它会删除WGS84以外的所有内容,这是我所期望的。
谁能告诉我我做错了什么?我认为\{-}
在Vim中强加了非贪婪的匹配。
谢谢,
约翰
答案 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/[^,]*//