我正在将csv格式的数据集导入数据库。
csv文件的结构就像这样
部件号,描述,Netto价格,Brutto价格,评论
11009,滚珠轴承,“22,09”,“38,05”,“注意,本文与koyo xxxxxx相同”
由于我还不熟悉正则表达式,有人可以帮帮我吗?
或者也许是为我编写perl脚本。
谢谢
答案 0 :(得分:3)
如果你可以使用Vim(here's a quickstart)来编辑你的CSV文件,那么Vim中的这个命令会给你你想要的行为,假设输入是这样形成的("xx,yy"
到{{1 }}):
"xx.yy"
然后,您可以点击:%s/"\(\d\+\),\(\d\+\)"/"\1.\2"/g
保存文件并退出程序。该正则表达式(:wq
)也应该作为接受正则表达式的其他程序(或语言)的起点。
答案 1 :(得分:3)
没有必要;它可以在MySQL中单独完成。
LOAD DATA INFILE 'data.csv'
INTO TABLE prices
FIELDS
TERMINATED BY ','
ENCLOSED BY '"'
(partno, desc, @net, @gross, comment)
SET
net=REPLACE(@net, ',', '.'),
gross=REPLACE(@gross, ',', '.'),
答案 2 :(得分:0)
因此,只有当浮点数位于由双引号分隔的字符串中时,才需要替换逗号。这是你想要的正则表达式:
/(?<=")(\d+),(\d+)(?=")/
哪个只匹配{22; 09}和{38; 05}。
答案 3 :(得分:0)
以下是如何使用Ruby编程语言完成的。不确定这是否有帮助:
row = 'abc, "22,09", t'
row.gsub(/([0-9]+),([0-9]+)/, '\1.\2')
puts row # result is: abc, "22.09", t
对gsub的调用会搜索任意一系列数字,后跟一个逗号,后跟任意一系列数字,并用逗号替换逗号。