2012-07-13 232 views
1

我只发现这与我正在寻找的相关:Split string by count of characters,但它对我的意思没有用处。将lua字符串拆分为字符

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

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

在此先感谢

回答

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) 
+0

第一个代码没有工作,第二个正是我所需要的。接受你的答案,谢谢:) – Karevan 2012-07-13 14:34:45

+0

奇怪。在这里他们完全一样。 – jpjacobs 2012-07-13 14:38:44

+0

好吧,我仍然有一个问题,表的第一个索引工作正常,如果字符串低于009,否则它等于完整的字符串:s和其他值为零 – Karevan 2012-07-13 14:40:51

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_printlua-users wiki: Table Serialization;并打印此代码:

"a" 
" " 
"-" 
" " 
"b" 
" " 
"-" 
" " 
"c" 
相关问题