我有以下字符串作为输入:
“总计7,525.07”
在下面的代码中,字符串表示为“a.message”
print (string.match(a.message, "(%d+),(%d+)(%d+)(%d+).(%d+)") )
sum = (string.match(a.message, ".-(%d+). -([%d%.%,]+)") )
上面的代码只生成一个数字7而不是整数。理想情况下,我是在整数后,但我的代码是从图中删除小数。我尝试了各种不同的配置,但似乎没有任何进展。
答案 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
希望这可以帮助任何需要它的人:)