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

在某些 Web 服务中,我收到了这个

"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"

我想将这些数字分离并将它们插入到一个表格中,像这样,怎么做呢?

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
点赞
用户3924687
用户3924687

一点字符串匹配就能完成这项工作:

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。

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

2016-07-24 09:06:44