lua - 如何使用模式忽略lua中输入字符串的某些部分?

标签 lua pattern-matching lua-patterns

背景信息

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

相关文章:

lua - 如何在Lua中将B组中找到的所有元素删除到A组中

linux - 真棒 WM : terminal window doesn't take full space

matrix - Lua 中令人困惑的矩阵生成示例

scala - 声明一种接受未知案例类作为参数的方法,以在 Scala 中的模式匹配中使用它

string - Lua 'plain' string.gsub

lua - 无法从 NodeMCU 板连接到 Wi-Fi 网络

linux - Freepbx自定义上下文出站路由

java - 任何用于图中子图(路径)匹配的库或建议的解决方案?

javascript - Lua 模式匹配中 ".-"的 RegEx 等价物是什么?

string - Lua 模式排除