我正在构建一个lib,我需要拆分一个字符串,字符串就像这样
'PROTOCAL:ROOM:USER:MESSAGE:MESSAGE_ID:TIME_FLOAT'
在python中,我可以将其转换为列表,然后拆分列表,例如
string = 'PROTOCAL:ROOM:USER:MESSAGE:MESSAGE_ID:TIME_FLOAT'
string = string.split(':', 1)
strlst = list()
for stri in string: strlst.append(stri)
现在有了这个列表,我可以像这样拼接它,
a = strlst[:0]
b = strlst[0:]
c = strlst[0]
这可以在Lua完成。
答案 0 :(得分:2)
请注意,对于长度为2或更长的分隔符,以下拆分功能将失败。因此,您无法将其用作,:
之类的分隔符。
function split( sInput, sSeparator )
local tReturn = {}
for w in sInput:gmatch( "[^"..sSeparator.."]+" ) do
table.insert( tReturn, w )
end
return tReturn
end
您将按如下方式使用它:
str = 'PROTOCAL:ROOM:USER:MESSAGE:MESSAGE_ID:TIME_FLOAT'
strlist = split( str, ':' )
现在,对于lua-tables,索引从1
而不是0
开始,您可以使用table.unpack
对小表进行切片。所以,你将拥有:
a1 = {table.unpack(strlist, 1, 0)} -- empty table
a2 = {table.unpack(strlist, 1, 1)} -- just the first element wrapped in a table
b1 = {table.unpack(strlist, 1, #list)} -- copy of the whole table
b2 = {table.unpack(strlist, 2, #list)} -- everything except first element
c = strlist[1]
(table.unpack
在Lua 5.2中起作用,在Lua中只有unpack
5.1)
对于较大的表格,您可能需要编写自己的shallow table copy函数。
答案 1 :(得分:0)
支持任意长度分隔符的版本:
local function split(s, sep)
local parts, off = {}, 1
local first, last = string.find(s, sep, off, true)
while first do
table.insert(parts, string.sub(s, off, first - 1))
off = last + 1
first, last = string.find(s, sep, off, true)
end
table.insert(parts, string.sub(s, off))
return parts
end