将lua字符串拆分为字符

时间:2012-07-13 14:08:51

标签: lua

我发现这与我正在寻找的内容有关:Split string by count of characters但它对我的意思没有用。

我有一个字符串变量,它是3个数字的大小(可以是000到999)。我需要将每个数字(字符)分开并将它们放入表中。

我正在编写一个使用lua的游戏mod,它还有一些额外的功能。如果你可以帮助我使用它:http://wiki.multitheftauto.com/wiki/Split会很棒,但任何其他方式都可以。

提前致谢

2 个答案:

答案 0 :(得分:4)

更正了OP想要提出的问题:

要将3位数字分成3个数字,这就更容易了:

s='429'
c1,c2,c3=s:match('(%d)(%d)(%d)')
t={tonumber(c1),tonumber(c2),tonumber(c3)}

“如何拆分由3位数组成的长字符串”的答案:

这是微不足道的。您可以查看gmatch function in the reference manual

s="123456789"
res={}
for num in s:gmatch('%d%d%d') do
    res[#res+1]=tonumber(num)
end

或者如果你不喜欢循环:

res={}
s:gsub('%d%d%d',function(n)res[#res+1]=tonumber(n)end)

答案 1 :(得分:0)

我正在寻找这样的东西,但是避免循环 - 并希望将它作为一个班轮。最后,我从lua-users wiki: Split Join找到了这个例子:

fields = {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))}

......这正是我喜欢的语法 - 一个班轮,返回一张表 - 除了,我真的不明白发生了什么:/我试着找到合适的语法,用这个成语分成几个字符,显然是:

fields = { str:match( (str:gsub(".", "(.)")) ) }

我想,发生的事情是gsub基本上放置括号' (.)'围绕每个角色' .' - 以便match将这些视为单独的匹配单元,并且"提取"它们也是独立的单位...但我仍然不明白为什么在str:gsub(".", "(.)")片段周围有一对额外的括号。

我用Lua5.1测试了这个:

str = "a - b - c"
fields = { str:match( (str:gsub(".", "(.)")) ) }
print(table_print(fields))

...其中table_print来自lua-users wiki: Table Serialization;这段代码打印出来:

"a"
" "
"-"
" "
"b"
" "
"-"
" "
"c"