如何隔离 Lua 中由星号分隔的数字?
How to isolate numbers separated by stars in Lua?
在一些网络服务中,我收到这个
"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"
我想像这样把数字分开插入到一个table中,怎么办?
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+
意味着我们想要另一个数字序列。比如18.114
中的114
那么,括号是什么意思?这只是意味着我们在捕获模式时不关心括号之外的任何其他内容。
在一些网络服务中,我收到这个
"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"
我想像这样把数字分开插入到一个table中,怎么办?
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+
意味着我们想要另一个数字序列。比如18.114
114
那么,括号是什么意思?这只是意味着我们在捕获模式时不关心括号之外的任何其他内容。