我有一个包含这样数据的csv文件
Zoos, Sanctuaries & Animal Parks,7469,3.00
不幸的是,这不正确,因为第一部分应该是像这样的所有一个字段
"Zoos, Sanctuaries & Animal Parks","7469","3.00"
由于这只是一次性导入,我很乐意将其转换为
Zoos, Sanctuaries & Animal Parks|7469|3.00
将最后一个和后一个最后一个逗号转换为管道。使用正则表达式有一种简单的方法吗?
答案 0 :(得分:2)
要将逗号转换为管道最后2项,您可以这样做
>>> re.sub(",(\d+),([\d.]+)$","|\\1|\\2","Zoos, Sanctuaries & Animal Parks,7469,3.00")
'Zoos, Sanctuaries & Animal Parks|7469|3.00'
答案 1 :(得分:1)
这样的事情应该有效:
s/(\S),(\S)/\1|\2/g
(用管道替换所有用空格字符包围的逗号。)
答案 2 :(得分:1)
您可以通过这种方式转换为管道。只需通过此命令提供文字:
sed 's/,\([^,]*\),\([^,]*\)$/|\1|\2/'
答案 3 :(得分:1)
$ cat test.csv
Zoos, Sanctuaries & Animal Parks,7469,3.00
a,100,2000
a,b and c, 100,300
$ cat test.csv | perl -npe 's/^(.*),(.*),(.*)$/$1|$2|$3/'
Zoos, Sanctuaries & Animal Parks|7469|3.00
a|100|2000
a,b and c| 100|300
答案 4 :(得分:0)
将最后一个逗号转换为管道:
将^(.*?),([^,]*?),([^,]*?)$
替换为$1|$2|$3
甚至更好 - 将它们转换为正确的格式:
将^(.*?),([^,]*?),([^,]*?)$
替换为"$1","$2","$3"