2016-07-24 58 views
2

在某些網絡服務,我收到此如何隔離Lua中星號分隔的數字?

「時間」:「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 

回答

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這意味着尋找一個特定的數字。

%.指具體來看一段

+手段來尋找1個或更多的你想更早匹配特定的事情。

%*表示專門尋找明星。

*當百分比符號不在前面時,這意味着您可以匹配0個或多個特定的匹配項。


現在,讓我們把這個一起來了解一下它從一開始:

%**這意味着,我們希望字符串開始一個明星,但它是可選的。我們需要它是可選的原因是因爲你想要的第一個數字在它前面沒有星號。

%d+意味着要查找一個數字序列,直到其他東西彈出。在我們的例子中,這就像'18 .114'中的'18'或者'1.387'中的'1',

, , ,

%.,正如我所說的,意味着我們希望接下來發現的一段時間。

%d+表示我們需要另一個數字序列。如11418.114

那麼,括號是什麼意思呢?這隻意味着當我們捕獲模式時,我們不關心括號外的任何其他內容。

+0

不錯,但你能解釋一下gmatch裏面的東西嗎? 任何解釋,如果我想在未來做我自己的不同比賽? – DeyaEldeen

+0

請參閱有關此主題的lua手冊:https://www.lua.org/manual/5.3/manual.html#6.4.1。 %**匹配任何數量的*(%*是一個文字*),但事實上在這種情況下不需要。你可以簡單地匹配數字。這些數字由一串數字(%d)組成,其中必須至少有一個(+),然後是一個字面點(%。),然後是一串數字。洞匹配被捕獲,因此()被添加在數字周圍。 – pschulz

+1

您正在將字符串插入表中,而不是數字。 –