2013-10-09 77 views
23

我已經使用Google搜索,但我只是沒有得到它。看起來像這樣一個簡單的功能,但當然Lua沒有它。Lua需要以逗號分隔

在Python,我會做

string = "cat,dog" 
one, two = string.split(",") 

,然後我將有兩個變量,一個=貓。兩個=狗

我該如何做到這一點在Lua!?

+1

可能重複[Split string in lua?](http://stackoverflow.com/questions/1426954) /分割字符串在-LUA) – hjpotter92

回答

21

如果可以使用圖書館,答案是(經常在Lua中)到use Penlight

如果手電筒筆是你太重了,你只是想用一個逗號分割的字符串,就像在你的榜樣,你可以做這樣的事情:

string = "cat,dog" 
one, two = string:match("([^,]+),([^,]+)") 
49

試一下這個

str = 'cat,dog' 
for word in string.gmatch(str, '([^,]+)') do 
    print(word) 
end 

「[^,]」的意思是「一切,但逗號,+號表示‘一個或多個字符’。括號創建捕獲(不是真的需要在這種情況下) 。

13

添加此分割功能在你的頁面的頂部:

function string:split(inSplitPattern, outResults) 
    if not outResults then 
    outResults = { } 
    end 
    local theStart = 1 
    local theSplitStart, theSplitEnd = string.find(self, inSplitPattern, theStart) 
    while theSplitStart do 
    table.insert(outResults, string.sub(self, theStart, theSplitStart-1)) 
    theStart = theSplitEnd + 1 
    theSplitStart, theSplitEnd = string.find(self, inSplitPattern, theStart) 
    end 
    table.insert(outResults, string.sub(self, theStart)) 
    return outResults 
end 

然後執行以下操作:

local myString = "Flintstone, Fred, 101 Rockledge, Bedrock, 98775, 555-555-1212" 

local myTable = myString:split(", ") 
for i = 1, #myTable do 
    print(myTable[i]) -- This will give your needed output 
end 

欲瞭解更多信息,請訪問:Tutorial: Lua String Magic

保持編碼............... :)

0

string.split()功能在很大程度上是不必要的在Lua中,因爲您可以 在LPEG中表示字符串操作。 如果您仍然需要專用功能,方便的方法是 定義一個拆分器工廠(mk_splitter() in below snippet) 然後您可以從中導出自定義拆分器。

local lpeg  = require "lpeg" 
local lpegmatch = lpeg.match 
local P, C  = lpeg.P, lpeg.C 

local mk_splitter = function (pat) 
    if not pat then 
    return 
    end 
    pat   = P (pat) 
    local nopat = 1 - pat 
    local splitter = (pat + C (nopat^1))^0 
    return function (str) 
    return lpegmatch (splitter, str) 
    end 
end 

使用LPEG的優點是該函數接受 都有效Lua中的字符串和模式作爲參數。

這裏是你將如何使用它來創建一個函數,在,字符 分割字符串:

commasplitter = mk_splitter "," 

print (commasplitter [[foo, bar, baz, xyzzy,]]) 
print (commasplitter [[a,b,c,d,e,f,g,h]]) 
1

這是我該怎麼辦就鏈接到MediaWiki:

str = "cat,dog" 
local result = mw.text.split(str,"%s*,%s*") 
-- result[0] will give "cat", result[1] will give "dog" 

實際上,如果你不在乎空間,你可以使用:

str = "cat,dog" 
local result = mw.text.split(str,",") 
-- result[0] will give "cat", result[1] will give "dog" 
2

- 像C strtok的,分割在一個更定界符(發現每串不含有任何的分隔符)

function split(source, delimiters) 
     local elements = {} 
     local pattern = '([^'..delimiters..']+)' 
     string.gsub(source, pattern, function(value) elements[#elements + 1] =  value; end); 
     return elements 
    end 

- 例子:var =元素分割(「再見#再見,錯過$美國@餅」,「 ,#$ @「) - 返回」bye「」bye「」miss「」american「」pie「