正则表达式,将“22,09”替换为“22.09”

时间:2010-11-28 02:35:55

标签: mysql database regex

我正在将csv格式的数据集导入数据库。

csv文件的结构就像这样

  

部件号,描述,Netto价格,Brutto价格,评论
  11009,滚珠轴承,“22,09”,“38,05”,“注意,本文与koyo xxxxxx相同”

由于我还不熟悉正则表达式,有人可以帮帮我吗?

或者也许是为我编写perl脚本。

谢谢

4 个答案:

答案 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的调用会搜索任意一系列数字,后跟一个逗号,后跟任意一系列数字,并用逗号替换逗号。