我只發現這與我正在尋找的相關:Split string by count of characters,但它對我的意思沒有用處。將lua字符串拆分爲字符
我有一個字符串變量,這是一個3個數字(可以從000到999)。我需要分離每個數字(字符)並將它們放入表格中。
我是一個使用lua的遊戲mod編程,它有一些額外的功能。如果你能幫助我使用它:http://wiki.multitheftauto.com/wiki/Split會很棒,但其他任何方式都可以。
在此先感謝
我只發現這與我正在尋找的相關:Split string by count of characters,但它對我的意思沒有用處。將lua字符串拆分爲字符
我有一個字符串變量,這是一個3個數字(可以從000到999)。我需要分離每個數字(字符)並將它們放入表格中。
我是一個使用lua的遊戲mod編程,它有一些額外的功能。如果你能幫助我使用它:http://wiki.multitheftauto.com/wiki/Split會很棒,但其他任何方式都可以。
在此先感謝
修正到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)
我一直在尋找這樣的事情,但避免了循環 - 希望有它作爲一個-襯墊。最終,我發現從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"
第一個代碼沒有工作,第二個正是我所需要的。接受你的答案,謝謝:) – Karevan 2012-07-13 14:34:45
奇怪。在這裏他們完全一樣。 – jpjacobs 2012-07-13 14:38:44
好吧,我仍然有一個問題,表的第一個索引工作正常,如果字符串低於009,否則它等於完整的字符串:s和其他值爲零 – Karevan 2012-07-13 14:40:51