在某些网络服务中,我收到了
“时间”:“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
答案 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
那么,括号是什么意思?这只意味着当我们捕获模式时,我们不关心括号外的任何其他内容。