1

我有一个 CSV 文件,数据是这样的:

"asdd","12","good"

但有些数据不受监管,比如

"name1,name2","34","bad"

如何将双引号之间的“,”替换为另一个(例如“|”或“-”等)?

ADD:文件大小几乎达到40M。

4

4 回答 4

1

如果我正确理解了您的问题,那么以下命令应该可以解决问题

:%s/\v([^"]),([^"])/\1-\2/g

它将替换所有,未被包围"-

这里假设所有的csv数据都被包围"

样本输入:

"name1,name2","34","bad"
"asdd","12","good"
"name1,name2,name3","34","bad"

输出:

"name1-name2","34","bad"
"asdd","12","good"
"name1-name2-name3","34","bad"
于 2013-10-20T16:57:57.087 回答
1

试试这一行:

%s/[^"]\zs,\ze[^"]/-/g

如果您想在 之前和之后处理(删除)空格,,例如:

"name1,   name2","34","bad"
"asdd","12","good"
"name1,  name2  ,name3","34","bad"

你可以执行:

%s/[^"]\zs\s*,\s*\ze[^"]/-/g

它将上面的示例更改为:

"name1-name2","34","bad"
"asdd","12","good"
"name1-name2-name3","34","bad"
于 2013-10-20T17:11:44.007 回答
1

你可以使用我的csv 插件。它提供了许多使用 CSV 文件的可能性。在您的情况下,您只需使用:NewDelimiter |来制作|新的分隔符。

于 2013-10-20T17:41:12.837 回答
0

命令:

:s/","/"|"/g

将文档中的每个“,”替换为“|”

这将改变:

"Hello","world","foo,bar"

"Hello"|"world"|"foo,bar"
于 2013-10-20T16:52:46.697 回答