Lua需要在逗号处拆分。

我已经谷歌了,但还是没有搞懂。似乎这是一个如此简单的函数,但当然 Lua 没有它。

在 Python 中,我会这样做:

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

然后我就有了两个变量,one = cat, two = dog。

在 Lua 中,我应该怎么做呢?!

点赞
用户427413
用户427413

尝试这样做

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

\[^,\] 表示 "除逗号以外的所有内容",+ 符号表示 "一个或多个字符"。括号则用来创建一个匹配组(在这个例子中不是必需的)。

2013-10-09 03:57:25
用户1979583
用户1979583

在页面顶部添加此分割函数:

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] ) -- 这将给出您所需的输出
end

有关更多信息,请访问:教程:Lua字符串魔术

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

2013-10-09 04:42:24
用户204011
用户204011

如果可以使用库,答案通常是(就像Lua中经常那样)使用Penlight

如果Penlight对你来说过于沉重,而且你只想像你的例子那样使用一个逗号来拆分字符串,你可以这样做:

string = "猫,狗"
one, two = string:match("([^,]+),([^,]+)")
2013-10-09 10:15:03
用户441830
用户441830

string.split() 这样的函数在 Lua 中是大多数情况下不必要的,因为你可以在 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]])
2013-10-09 10:21:53
用户2260864
用户2260864

以下是我如何在mediawiki上实现的:

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

实际上,如果您不在意空格,也可以使用以下代码:

str = "cat,dog"
local result = mw.text.split(str,",")
-- result[0]会返回"cat",result[1]会返回"dog"

这里使用的API是Scribunto MediaWiki扩展中实现的。split()方法参考文档可以在此找到,该方法的源代码也在此。该方法依赖于Scribunto的Lua常见库中的许多其他功能,因此仅当您实际使用MediaWiki或计划导入大部分Scribunto常见库时,它才适用于您。

2014-04-30 20:02:00
用户1211859
用户1211859
函数 split(source, delimiters)
        local elements = {} 
        local pattern = '([^'..delimiters..']+)'
        string.gsub(source, pattern, function(value) elements[#elements + 1] = value; end)
        return elements
end

此函数类似于 C语言的 strtok()函数,使用一个或多个分隔符分割字符串(找到不包含任何分隔符的每个字符串)

示例: 变量 elements = split("bye# bye, miss$ american@ pie", ",#$@ ") 返回 "bye" "bye" "miss" "american" "pie"

2015-04-07 17:03:20
用户2879085
用户2879085

为了处理可选的空白字符,可以使用以下代码:

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

输出结果将是:

cat
dog
mouse
horse
2018-07-25 20:07:36