我有一个 CSV 文件,数据是这样的:
"asdd","12","good"
但有些数据不受监管,比如
"name1,name2","34","bad"
如何将双引号之间的“,”替换为另一个(例如“|”或“-”等)?
ADD:文件大小几乎达到40M。
我有一个 CSV 文件,数据是这样的:
"asdd","12","good"
但有些数据不受监管,比如
"name1,name2","34","bad"
如何将双引号之间的“,”替换为另一个(例如“|”或“-”等)?
ADD:文件大小几乎达到40M。
如果我正确理解了您的问题,那么以下命令应该可以解决问题
:%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"
试试这一行:
%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"
你可以使用我的csv 插件。它提供了许多使用 CSV 文件的可能性。在您的情况下,您只需使用:NewDelimiter |
来制作|
新的分隔符。
命令:
:s/","/"|"/g
将文档中的每个“,”替换为“|”
这将改变:
"Hello","world","foo,bar"
至
"Hello"|"world"|"foo,bar"