3

我正在尝试删除 csv 文件中每行的第一个逗号之前的所有内容。这些行是这样的:

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

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

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

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

谢谢,

约翰

4

4 回答 4

3

我只会使用[^,]*而不是.*. 这将使您的正则表达式对逗号不贪婪。

至于为什么您的变体不起作用,您的正则表达式中的对象似乎是错误的。{-}应该是等价于*但不贪心,而且你已经习惯*了尽可能多地吸食。你那里也有太多的反斜杠。尝试:

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

反而。

当我对您的测试输入执行此操作时,我得到:

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

正如预期的那样。

于 2012-09-07T01:43:19.910 回答
3

\{-}是 Vim 中的非贪婪匹配,所以你应该使用\{-}而不是*.

尝试:

%s/.\{-},//
于 2012-09-07T01:46:00.970 回答
2

另一种方法是使用 global 命令。

:g//normal dt,
于 2012-09-07T01:49:15.570 回答
1

这是你需要做的

%s/[^,]*//
于 2012-09-07T01:45:44.000 回答