2013-10-09 43 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“