4

我有一个模式,其中 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

4 回答 4

8

您需要捕获组。尝试:

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

[一个数字也可以用.来表示\d。]

于 2013-07-26T07:21:15.943 回答
4

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

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

解释:

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

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

于 2013-07-29T08:24:01.213 回答
1

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

试试这个:

:%s/\([0-9]\)"\([0-9]\)/\1\2/g
于 2013-07-26T07:21:30.113 回答
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

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

于 2013-07-26T07:25:48.220 回答