我有一个CSV文件,数据是这样的:
"asdd","12","good"
字符串但有些数据是不规范的,如
"name1,name2","34","bad"
型如何将','替换为另一个(例如'|'或'-'等)之间的双引号?附加:文件大小几乎到40 M。
50pmv0ei1#
您可以使用我的csv plugin。它提供了许多处理CSV文件的可能性。在您的情况下,您只需使用:NewDelimiter |使|成为新的CSV文件。
:NewDelimiter |
|
kq0g1dla2#
如果我正确理解了你的问题,那么下面的命令应该可以解决这个问题。
:%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"
型
vxqlmq5t3#
试试这条线:
%s/[^"]\zs,\ze[^"]/-/g
字符串如果你想处理(删除),之前和之后的空格,例如:
"name1, name2","34","bad" "asdd","12","good" "name1, name2 ,name3","34","bad"
型你可以执行:
%s/[^"]\zs\s*,\s*\ze[^"]/-/g
型它将把上面的例子变成:
kq4fsx7k4#
命令:
:s/","/"|"/g
字符串将文档中的每个“,”替换为“|“这将改变:
"Hello","world","foo,bar"
型到
"Hello"|"world"|"foo,bar"
cczfrluj5#
如果每一个","都是正则的:
","
:%s/\(",\{-}"\)\|,/-\1/g
字符串其次是
:%s/-"/"/g
型应该工作还有:
:%s/\(\<\(",.\{-}"\>\)\@!\k\+\>\),/\1-/g
5条答案
按热度按时间50pmv0ei1#
您可以使用我的csv plugin。它提供了许多处理CSV文件的可能性。在您的情况下,您只需使用
:NewDelimiter |
使|
成为新的CSV文件。kq0g1dla2#
如果我正确理解了你的问题,那么下面的命令应该可以解决这个问题。
字符串
它将用
-
替换所有未被"
包围的,
这里假设所有csv数据都用
"
包围样品输入:
型
输出量:
型
vxqlmq5t3#
试试这条线:
字符串
如果你想处理(删除)
,
之前和之后的空格,例如:型
你可以执行:
型
它将把上面的例子变成:
型
kq4fsx7k4#
命令:
字符串
将文档中的每个“,”替换为“|“
这将改变:
型
到
型
cczfrluj5#
如果每一个
","
都是正则的:字符串
其次是
型
应该工作
还有:
型