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

Dey*_*een 2 arrays string lua coronasdk

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

"时间": "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
Run Code Online (Sandbox Code Playgroud)

Dig*_*eer 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
Run Code Online (Sandbox Code Playgroud)

一点点解释

我将首先简要总结一下这里的一些符号:

%d 这意味着要查找特定的数字.

%. 意味着专门寻找一段时期

+ 意味着要查找一个或多个您想要匹配的特定事物.

%* 意思是专门寻找一个明星.

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


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

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

%d+意味着寻找一系列数字,直到其他东西弹出.在我们的例子中,这就像'18 .114'中的'18'或'1.387'中的'1'

%. 正如我所说,我们希望下一件事情发现是一个时期.

%d+意味着我们想要另一个数字序列.如11418.114

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

  • 如果你知道数字格式正确,那么更简单的模式`"[%d.] +"`工作正常. (2认同)