我需要对字符串进行简单的拆分,但似乎没有这个功能,我测试的手动方式似乎不起作用.我该怎么办?
这是我非常简单的解决方案.使用gmatch函数捕获包含除所需分隔符以外的ANYTHING的至少一个字符的字符串.默认情况下,分隔符是ANY空格(Lua中为%s):
function mysplit (inputstr, sep) if sep == nil then sep = "%s" end local t={} for str in string.gmatch(inputstr, "([^"..sep.."]+)") do table.insert(t, str) end return t end
如果要在Lua中拆分字符串,则应尝试使用string.gmatch()或string.sub()方法.如果您知道要将字符串拆分为的索引,请使用string.sub()方法;如果要解析字符串以找到要拆分字符串的位置,请使用string.gmatch().
使用Lua 5.1参考手册中的 string.gmatch()的示例:
t = {} s = "from=world, to=Lua" for k, v in string.gmatch(s, "(%w+)=(%w+)") do t[k] = v end
如果你只想迭代令牌,这非常简洁:
line = "one, two and 3!" for token in string.gmatch(line, "[^%s]+") do print(token) end
输出:
一,
二
和
3!
简短说明:"[^%s] +"模式匹配空格字符之间的每个非空字符串.
就像在字符串中string.gmatch
找到模式一样,这个函数会找到模式之间的东西:
function string:split(pat) pat = pat or '%s+' local st, g = 1, self:gmatch("()("..pat..")") local function getter(segs, seps, sep, cap1, ...) st = sep and seps + #sep return self:sub(segs, (seps or 0) - 1), cap1 or sep, ... end return function() if st then return getter(st, g()) end end end
默认情况下,它返回由空格分隔的任何内容.
这是功能:
function split(pString, pPattern) local Table = {} -- NOTE: use {n = 0} in Lua-5.0 local fpat = "(.-)" .. pPattern local last_end = 1 local s, e, cap = pString:find(fpat, 1) while s do if s ~= 1 or cap ~= "" then table.insert(Table,cap) end last_end = e+1 s, e, cap = pString:find(fpat, last_end) end if last_end <= #pString then cap = pString:sub(last_end) table.insert(Table, cap) end return Table end
称之为:
list=split(string_to_split,pattern_to_match)
例如:
list=split("1:2:3:4","\:")
欲了解更多信息,请访问:http:
//lua-users.org/wiki/SplitJoin
我喜欢这个简短的解决方案
function split(s, delimiter) result = {}; for match in (s..delimiter):gmatch("(.-)"..delimiter) do table.insert(result, match); end return result; end
因为有一种方法来给猫皮肤,这是我的方法:
代码:
#!/usr/bin/env lua local content = [=[ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ]=] local function split(str, sep) local result = {} local regex = ("([^%s]+)"):format(sep) for each in str:gmatch(regex) do table.insert(result, each) end return result end local lines = split(content, "\n") for _,line in ipairs(lines) do print(line) end
输出:
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
说明:
该gmatch
函数用作迭代器,它获取匹配的所有字符串regex
.该regex
直到它找到一个分离器需要的所有字符.
您可以使用以下方法:
function string:split(delimiter) local result = { } local from = 1 local delim_from, delim_to = string.find( self, delimiter, from ) while delim_from do table.insert( result, string.sub( self, from , delim_from-1 ) ) from = delim_to + 1 delim_from, delim_to = string.find( self, delimiter, from ) end table.insert( result, string.sub( self, from ) ) return result end delimiter = string.split(stringtodelimite,pattern)