使用lua脚本解析csv

时间:2016-10-06 17:57:58

标签: regex csv lua

我有一个csv文件包含这样的数据:

+12345678901,08:00:00,12:00:00,1111100,35703,test.domain.net
+12345678901,,,0000000,212,test.domain.net

我试图编写将遍历每一行的lua代码,并创建一个这样的值数组:

local mylist = {}
for line in io.lines("data/dd.csv") do
        local id, start, finish, dow, int, domain = line:match("(+%d+),(%d*:*),(%d*:*),(%d*),(%d*),(%a*.*)")
        mylist[#mylist + 1] = { id = id, start = start, finish = finish, dow = dow, int = int, domain = domain}
        print(mylist[#mylist]['id'])
end

问题在于,当代码命中一行具有空值的开始和结束时,正则表达式失败并且所有字段都为零。

我认为使用*意味着0或更多...... 我似乎无法找到我的错误/拼写错误。

感谢。

2 个答案:

答案 0 :(得分:1)

您似乎只需将数字和:分组到[...]内:

match("(%+%d+),([%d:]*),([%d:]*),(%d*),(%d*),(.*)")
        ^       ^^^^^^   ^^^^^^     

现在,[%d:]*匹配零个或多个数字或:个符号。您的模式未找到匹配项,因为%d*:*匹配0+位数后跟0 + :个符号,并且您有超过1个此类序列。

此外,您需要转义第一个+以确保它与文字+匹配。

请参阅online Lua demo

答案 1 :(得分:1)

这种模式对我有用:

"(.-),(.-),(.-),(.-),(.-),(.-)$"