1

私はこれが私が探しているものに関連していることだけを見つけました:文字数で文字列を分割しますが、それは私が意味することには役に立ちません。

私は文字列変数を持っています。これは3つの数値の量です(000から999まで可能です)。それぞれの数字(文字)を分けて表にする必要があります。

私はluaを使用するゲームmodのプログラミングをしていますが、いくつかの追加機能があります。http://wiki.multitheftauto.com/wiki/Splitを使用して作成するのを手伝っていただければ素晴らしいと思いますが、他の方法でも問題ありません。

前もって感謝します

4

2 に答える 2

4

OPが聞きたかったことを修正しました:

3桁の数字を3つの数字に分割するだけで、さらに簡単になります。

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

「3桁の数字で構成される長い文字列を分割するにはどうすればよいですか」に対する答え:

これは些細なことです。gmatchリファレンスマニュアルの関数をご覧ください。

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)
于 2012-07-13T14:15:12.227 に答える
0

私はこのようなものを探していましたが、ループを避け、できればワンライナーとして使用しました。最終的に、lua-users wikiからこの例を見つけました:Split Join

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

...これはまさに私が望む種類の構文です-1つのライナー、テーブルを返します-ただし、何が起こっているのか本当に理解していません:/それでも、少し突っ込んだ後、分割する正しい構文を見つけることができましたこのイディオムを持つ文字に変換します。これは明らかに次のとおりです。

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

どうなるかというと、基本的には各文字gsubを括弧' 'で囲んでいるので、それらを別々の一致単位と見なし、それらも別々の単位として「抽出」します...しかし、それでも理由がわかりませんピースの周りに余分な括弧のペアがありますか。(.).matchstr:gsub(".", "(.)")

私はこれをLua5.1でテストしました:

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

...どこtable_printからですlua-userswiki:テーブルのシリアル化; そして、このコードは次のように出力します。

"a"
" "
"-"
" "
"b"
" "
"-"
" "
"c"
于 2015-01-14T06:58:23.657 に答える