Lua需要以逗号分割

时间:2013-10-09 03:50:51

标签: lua split match

我用谷歌搜索了,我只是没有得到它。看起来像这么简单的功能,但当然Lua没有它。

在Python中我会做

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

然后我会有两个变量,一个= cat。两个=狗

我如何在Lua中执行此操作??

7 个答案:

答案 0 :(得分:51)

试试这个

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

'[^,]'表示“除了逗号之外的所有内容,+符号表示”一个或多个字符“。括号创建一个捕获(在这种情况下不是真的需要)。

答案 1 :(得分:24)

如果您可以使用库,答案是(通常在Lua中)到use Penlight

如果Penlight对你来说太重了,你只想用你的例子中的逗号分割一个字符串,你可以这样做:

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

答案 2 :(得分:14)

在页面顶部添加此拆分功能:

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

保持编码...............:)

答案 3 :(得分:3)

- 与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 elements = split(" bye #bye,miss $ american @ pie",",#$ @") - 返回" bye" "再见" "未命中" "美国" "馅饼"

答案 4 :(得分: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"

答案 5 :(得分:0)

你可以在Lua中完成像string.split()这样的功能 表达LPEG中的字符串操作。 如果您仍需要专用功能,那么便捷的方法就是 定义拆分器工厂(mk_splitter()在下面的代码段中) 然后,您可以从中派生自定义拆分器。

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]])

答案 6 :(得分:0)

要处理可选的空白,您可以执行以下操作:

str = "cat,dog,mouse, horse"
for word in str:gmatch('[^,%s]+') do
    print(word)
end

输出将是:

cat
dog
mouse
horse