使用 Lua 脚本解析 CSV

我有一个 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

问题是当代码遇到开始和结束为空的行时,正则表达式失效,所有字段都变成 nil。

我以为使用 * 表示 0 或多个…… 我找不到我的错误/笔误。

谢谢。

点赞
用户3832970
用户3832970

看起来你只需要将数字和 : 放在 [...] 中组合起来:

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

现在,[%d:]* 匹配零个或更多个数字或 : 符号。你的模式没有找到匹配,是因为 %d*:* 匹配 0 个以上的数字,后面加上 0 个以上的 : 符号,而你有多个这样的序列。

另外,你需要转义第一个 + ,以确保它匹配字面上的 + 符号。

查看 在线 Lua 演示

2016-10-06 18:16:53
用户107090
用户107090

这个模式适用于我:

"(.-),(.-),(.-),(.-),(.-),(.-)$"
2016-10-07 03:38:44