使用lua从字符串中提取数字

我有以下字符串作为输入:

"总计7,525.07"

在下面的代码中,该字符串表示为"a.message"

print (string.match(a.message, "(%d+),(%d+)(%d+)(%d+).(%d+)") )

sum = (string.match(a.message, ".-(%d+). -([%d%.%,]+)") )

以上代码仅生成数字7而不是整个数字。理想情况下,我想得到整个数字,但我的代码从数字中去掉了小数点。我尝试了各种不同的配置,但似乎没有进展。

点赞
用户3832970
用户3832970

您可以使用不同的方法提取数字:

local a = "totalling  7,525.07" -- 7,525.07
print(string.match(a, '%S+$'))  -- 7,525.07
print(string.match(a, '%d[%d.,]*'))   -- 7,525.07
print(string.match(a, 'totalling%s*(%S+)'))  -- 7,525.07
print(string.match(a, 'totalling%s*(%d[,.%d]*)'))  -- 7,525.07
print(string.match(a, '%f[%d]%d[,.%d]*%f[%D]'))  -- 7,525.07

查看Lua演示

详情

  • %S+$ - 匹配字符串末尾的1个或多个非空白字符(由于数字在字符串末尾,因此有效)
  • %d[%d.,]* - 一个数字后面跟着0个或多个数字、 ., 字符
  • totalling%s*(%S+) - 匹配 totalling,0个或多个空格,然后捕获0个或多个非空白字符并返回捕获的值
  • totalling%s*(%d[,.%d]*) - 这也是一种依赖于 totalling 上下文的模式,但使用第二个模式来捕获数字
  • %f[%d]%d[,.%d]*%f[%D] - %f[%d] 断言在非数字和数字之间的位置, %d[,.%d]* 匹配数字然后0个或多个数字、 .,%f[%D] 前置模式断言在数字和非数字之间的位置。
2017-10-17 16:57:06
用户15491746
用户15491746

我发帖是因为我认为人们会需要这样的东西...

function getnumbersfromtext(txt)
local str = ""
string.gsub(txt,"%d+",function(e)
 str = str .. e
end)
return str;
end
-- 例子:
-- getnumbersfromtext("Y&S9^%75r76gu43red67tgy")
-- 将输出 975764367

希望这能帮到任何需要它的人 :)

2021-03-27 03:02:18