【问题标题】:How to isolate numbers separated by stars in Lua?如何在Lua中隔离由星号分隔的数字?
【发布时间】:2016-11-27 18:08:52
【问题描述】:

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

"时间":"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.76*16.313*16.766 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

【问题讨论】:

    标签: arrays string lua coronasdk


    【解决方案1】:

    一点点字符串匹配就可以完成工作:

    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+ 表示我们想要另一个数字序列。比如18.114中的114

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

    【讨论】:

    • 很好,但是你能解释一下 gmatch 里面是什么吗?如果我以后想自己做不同的比赛,有什么解释吗?
    • 请参阅有关此主题的 lua 手册:lua.org/manual/5.3/manual.html#6.4.1。 %** 匹配任意数量的 *(%* 是文字 *),但实际上在这种情况下不需要。您可以简单地匹配数字。这些数字由一堆数字 (%d) 组成,其中必须至少有一个 (+),然后是文字点 (%.),然后是一堆数字。空洞比赛被捕获,因此 () 被添加到数字周围。
    • 您在表格中插入字符串,而不是数字。
    • 如果您知道数字格式正确,那么更简单的模式 "[%d.]+" 可以正常工作。
    • 你能解释一下如何在空格之间分隔单词吗? gmatch("%s") 或 gmatch("%ss") 对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2014-08-29
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多