如何隔离 Lua 中由星号分隔的数字?

How to isolate numbers separated by stars in Lua?

在一些网络服务中,我收到这个

"time":"0.301*0.869*1.387*2.93*3.653*3.956*4.344*6.268*6.805*7.712*9.099*9.784*11.071*11.921*13.347*14.253*14.965*16.313*16.563*17.426*17.62*18.114"

我想像这样把数字分开插入到一个table中,怎么办?

0.301
0.869
1.387
2.93
3.653
3.956
4.344
6.268
6.805
7.712
9.099
9.784
11.071
11.921
13.347
14.253
14.965
16.313
16.563
17.426
17.62
18.114

稍作字符串匹配即可完成工作:

local str = [["time":"0.301*0.869*1.387*2.93*3.653*3.956*4.344*6.268*6.805*7.712*9.099*9.784*11.071*11.921*13.347*14.253*14.965*16.313*16.563*17.426*17.62*18.114"]]

local list = {}

for num in str:gmatch("%**(%d+%.%d+)") do
table.insert(list, tonumber(num))
end

一点解释

我先简单总结一下这里的一些符号是什么:

%d这意味着寻找一个特定的数字。

%.表示专门找一段

+ 表示查找您之前想要匹配的特定事物中的 1 个或多个。

%*表示专门找星星

* 当百分号不在前面时,这意味着您可以匹配 0 个或多个特定匹配项。


现在,让我们把它放在一起从头看一下:

%** 这意味着我们希望字符串以星号开头,但这是可选的。我们需要它是可选的原因是因为您想要的第一个数字前面没有星号。

%d+ 表示查找数字序列,直到弹出其他内容。在我们的例子中,这就像“18.114”中的“18”或“1.387”中的“1”

%. 正如我所说,我们希望下一个找到的是句点。

%d+ 意味着我们想要另一个数字序列。比如18.114

中的114

那么,括号是什么意思?这只是意味着我们在捕获模式时不关心括号之外的任何其他内容。