2016-09-27 10 views
2

括弧内の文字列間のスペースを削除しようとしました。しかし、それは機能のアドレスを与えている。ルアの括弧内の文字列間の空白を削除したい

str = "1791 (AR6K Async) S 2 0 0 0 -1 2129984 0 0 0 0 0 113 0 0 20 0 1 0 2370 0 0 4294967295 0 0 0 0 0 0 0 2147483647 0 3221520956 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0" 

local word = str:gmatch("%(%S+)%" , "") 
print(word) 

この上の文字列では、私はスペースを除いてすべてparanthesisから欲しいだけです。 paranthesisにスペースを入れずに次のような出力を得ようとしています。

"1791 (AR6KAsync) S 2 0 0 0 -1 2129984 0 0 0 0 0 113 0 0 20 0 1 0 2370 0 0 4294967295 0 0 0 0 0 0 0 2147483647 0 3221520956 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0" 

どうすれば解決するのか教えてください。

答えて

0

gmatchの返品を誤解しています。ストレートのドキュメントから:

s:gmatch(pattern)

これは、パターン発見イテレータを返します。イテレータは渡された文字列を検索し、渡されたパターンのインスタンスを探します。

for word in string.gmatch("Hello Lua user", "%a+") do print(word) end 
Hello 
Lua 
user 

のLuaのパターンは完全な正規表現ではありませんので、しかし、私が何をしたいがワンステップで可能であるかはわかりません。

for word in str:gmatch("%(.*%)") do 
    newWord = word:gsub(" ", "") 
    repWord = word:gsub("%)", "") 
    repWord = "%" .. repWord .. "%)" 
    str = str:gsub(repWord, newWord) 
end 

これは動作しますが、私は「良い」ソリューションを呼びたい何から遠く離れている:これは私が得た限りです。

5
str = "1791 (AR6K Async) S 2 0 0 0 -1 2129984 0 0 0 0 0 113 0 0 20 0 1 0 2370 0 0 4294967295 0 0 0 0 0 0 0 2147483647 0 3221520956 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0" 

str2 = str:gsub("%b()" , function(s) return (s:gsub("%s", "")) end) 
print(str2) 

説明:

を使用して、Luaのパターンこれらの文字列内のすべてのスペースを削除 "%b()"
2を使用して、括弧内のすべての文字列を横断
関連する問題