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

时间:2017-10-17 16:32:08

标签: lua numbers pattern-matching detection extraction

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

“总计7,525.07”

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

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

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

上面的代码只生成一个数字7而不是整数。理想情况下,我是在整数后,但我的代码是从图中删除小数。我尝试了各种不同的配置,但似乎没有任何进展。

2 个答案:

答案 0 :(得分:3)

您可以通过各种方式提取数字:

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 demo

<强>详情

  • %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+数字,.或{{1} }和, fontier模式断言数字和非数字之间的位置。

答案 1 :(得分:1)

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

function getnumbersfromtext(txt)
local str = ""
string.gsub(txt,"%d+",function(e)
 str = str .. e
end)
return str;
end
-- example: 
-- getnumbersfromtext("Y&S9^%75r76gu43red67tgy")
-- it will output 975764367

希望这可以帮助任何需要它的人:)