【问题标题】:tonumber and regex编号和正则表达式
【发布时间】:2015-03-09 10:00:32
【问题描述】:

Given 是一个(时间值)字符串,例如:

local dt = "12:34:56"

我想把这个字符串剪成

hh, mm, ss = "12", "34", "56"

因此我像这样使用正则表达式:

local hh = string.format("%02d", tonumber( dt:gsub(":..:..","") ))
local mm = string.format("%02d", tonumber( dt:gsub(":..:",""):gsub(":","") ))
local ss = string.format("%02d", tonumber( dt:gsub("..:..:","") ))

效果很好。 (时间字符串来自用户输入,所以如果用户写“1”而不是“01”,我用0填充)

但是在值以 0 开头的情况下,它超出了 luas tonumber() 的范围(我猜是零符号),与“1”相同,tonumber() 似乎不处理低于“2”的值) 谁能告诉我如何处理这种情况?

除此之外,如果您能向我展示我的正则表达式中的不良做法(如果有的话),我会很高兴。

【问题讨论】:

    标签: regex lua numbers lua-patterns


    【解决方案1】:

    整个事情可以简化为这一行:

    local hh, mm, ss = dt:match "(%d%d?):(%d%d?):(%d%d?)"
    

    至于你的tonumber出现的错误,是因为gsub运行后返回了2个值。第一个是替换的环,第二个是数字。 tonumber 假设第二个参数是提供的基础(我认为是 1)。由于以 1 为底的数字只能是0;它会引发错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2020-06-02
      相关资源
      最近更新 更多