将字符串时间戳中的前导零去掉

Lua支持有限的表达式模式

时间戳的格式为DD:HH:MM:SS,FF(天:小时:分钟:秒,毫秒)

目标是通过去除任何前导零来修剪/缩短时间戳,表示如下:

示例时间戳包括:

  1. timestamp = 00:00:00:00,00 => 0
  2. timestamp = 00:01:00:00,00 => 1:00:00,00
  3. timestamp = 00:00:01:00,00 => 1:00,00
  4. timestamp = 00:00:00:01,00 => 1,00
  5. timestamp = 99:23:59:59,99 => 99:23:59:59,99

我正在寻找一个简单的解决方案,例如[使用gsub](http://lua-users.org/wiki/CommonFunctions),TA

原文链接 https://stackoverflow.com/questions/71096960

点赞
stackoverflow用户2898815
stackoverflow用户2898815

这个正则表达式得分是 5/5,但是太长了

 local reg = '^[0]+[:]?[0]+[:]?[0]+[:]?[0]?'

    print('1 > ' .. '00:00:00:00,00 = ' .. ('00:00:00:00,00'):gsub(reg,''))
    print('2 > ' .. '00:01:00:00,00 = ' .. ('00:01:00:00,00'):gsub(reg,''))
    print('3 > ' .. '00:00:01:00,00 = ' .. ('00:00:01:00,00'):gsub(reg,''))
    print('4 > ' .. '00:00:00:01,00 = ' .. ('00:00:00:01,00'):gsub(reg,''))
    print('5 > ' .. '99:23:59:59,99 = ' .. ('99:23:59:59,99'):gsub(reg,''))
2022-02-13 01:33:12
stackoverflow用户7185318
stackoverflow用户7185318

为什么不使用 string.match?下面的代码是基于输入将是有效时间戳的假设。它可以正确处理所有五种情况,但我不确定将这样的字符串 00:00:00:00,42 转换为 42 是否是所需的。

local function trim_timestamp(timestamp)
    return timestamp:match"^[0:,]*(.+)$"
end

否则,将逗号和秒的第一个数字移入捕获的部分:

local function trim_timestamp(timestamp)
    return timestamp:match"^[0:]*(%d,.+)$"
end

注意,这将把第一个示例变成 0,00;您必须明确处理所有零的情况:

local function trim_timestamp(timestamp)
    local trimmed = timestamp:match"^[0:]*(%d,.+)$"
    if trimmed == "0,00" then return "0" end -- shorten all zeroes
    return trimmed
end
2022-02-13 16:28:26