vim搜索并替换号码

时间:2013-07-26 07:16:50

标签: vim

我有一种模式,CSV文件中的数字之间有双引号。 我可以通过[0-9] \“[0-9]搜索模式,但是如何在删除双引号时保留值.CSV格式如下:

"1234"5678","Text1","Text2"
"987654321","Text3","text4"
"7812891"3","Text5","Text6"

正如您可能会注意到我想删除的某些数字之间有双引号。

我尝试了以下方法,这是不正确的:

:%s/[0-9]\"[0-9]/[0-9][0-9]/g

是否可以在每个搜索模式下执行命令,可以向前移动一个字符并删除它。如何在搜索和替换中嵌入“lx”。

4 个答案:

答案 0 :(得分:7)

您需要捕获群组。尝试:

:%s/\(\d\)"\(\d\)/\1\2/g

[数字也可以用\d表示。]

答案 1 :(得分:2)

我知道这个问题已经回答了,但这是另一种方法:

:%s/\d\zs"\ze\d

说明:

%s替换整个缓冲区
\d查找数字
\zs在此处设置匹配的开始 "查找双引号 \ze在此处设置匹配结束 \d查找数字

这使得substitute命令只匹配数字包围的双引号 省略替换字符串只会删除匹配项。

答案 2 :(得分:1)

您需要在正则表达式中使用边界。

试试这个:

:%s/\([0-9]\)"\([0-9]\)/\1\2/g

答案 3 :(得分:1)

有点天真的解决方案:

%s/^"/BEGINNING OF LINE QUOTE MARK/g
%s/\",\"/quote comma quote/g
%s/\"$/quota end of line/g
%s/\"//g
%s/quota end of line/"/g
%s/quote comma quote/","/g
%s/BEGINNING OF LINE QUOTE MARK/"/g

可以很容易地创建一个宏,并根据需要多次调用。