在某些Web服务中,我收到了
“时间”:“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
最佳答案
进行一些字符串匹配即可完成工作:
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+
表示我们想要另一个数字序列。如114
中的18.114
那么,括号是什么意思呢?这只是意味着我们在捕获模式时不关心括号之外的任何其他内容。
关于arrays - 如何隔离Lua中以星号分隔的数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38550142/