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

时间:2016-07-24 08:31:59

标签: arrays string lua corona

在某些网络服务中,我收到了

  

“时间”:“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

1 个答案:

答案 0 :(得分:6)

一点点字符串匹配应该完成工作:

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这意味着要查找特定的数字。

%.意味着专门查看一段时间

+表示要查找一个或多个您想要匹配的特定内容。

%*意味着专门寻找明星。

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

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

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

%d+表示查找一系列数字,直到弹出其他内容。在我们的例子中,这就像'18 .114'中的'18'或'1.387'中的'1'

%.正如我所说,这意味着我们希望下一件事发现是一个时期。

%d+表示我们需要另一个数字序列。例如114

中的18.114

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