背景信息
我有一个 csv 文件,其中的行如下所示:
+11231231234,13:00:00,17:00:00,1111100,12345,test.net
+11231231234,,,0000000,23456,test.net
+11231231234,18:00:00,19:00:00,1111100,09991,test.net
我现在的lua模式是这样的:
local id, start_time, end_time, asd, int, domain = line:match("(%+%d+),([%d%d:]*),([%d%d:]*),(%d*),([%d%*%#]*),(%a*.*)")
及其工作
问题
如何更改此模式以便如果存在 start_time/end_time 值,我只想提取前两组数字?因此,例如,从这个输入:
+11231231234,18:00:00,19:00:00,1111100,09991,test.net
我想以这些值结束:
start_time = 18:00
end_time = 19:00
代替
start_time = 18:00:00
end_time = 19:00:00
我尝试过的
我试过改变这个:
line:match("(%+%d+),([%d%d:]*),([%d%d:]*),(%d*),([%d%*%#]*),(%a*.*)")
为此:
line:match("(%+%d+),([%d%d:%d%d]*),([%d%d:%d%d]*),(%d*),([%d%*%#]*),(%a*.*)")
但这是不行的
编辑 1
我把模式改成这样:
line:match("(%+%d+),(%d*:?%d*)[%d:]*,(%d*:?%d*)[%d:]*,(%d*),([%d%*#]*),(%S*)")
在某些情况下,它可以工作......但在以下情况下,它会失败:
+11231231234,00:00:00,00:00:00,1111100,12345,test.net
因此,当时间戳全面为零时,它不会正确地调整秒数。我目前正在审查代码以确保它不是我的拼写错误。 谢谢。
最佳答案
local id, start_time, end_time, asd, int, domain =
line:match("(%+%d+),(%d*:?%d*)[%d:]*,(%d*:?%d*)[%d:]*,(%d*),([%d%*#]*),(%S*)")
关于lua - 如何使用模式忽略lua中输入字符串的某些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919850/