2016-09-27 3 views
2

괄호 안에있는 문자열 사이의 공백을 제거하려고했습니다. 그러나 그것은 기능의 주소를 제공하고 있습니다.Lua의 괄호 안에있는 문자열 사이의 공백을 제거하고 싶습니다.

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

당신은 의 반환을 오해하고 있습니다. 바로 문서에서 :

s:gmatch(pattern)

이 패턴 찾는 반복자를 돌려줍니다. 반복기는 전달 된 문자열을 검색하여 통과 한 패턴의 인스턴스를 찾습니다. 그러나

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

, 루아의 패턴이 전체 정규 표현식하지 않기 때문에, 나는 당신이 원하는 것은 한 번에 수 있는지 확실하지 않습니다. 이것은 지금까지 내가 가지고있는 것입니다 :

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) 

설명 : 1.
:gsub("%s", "")

루아를 사용하여 패턴이 모든 문자열 내부 공간을 분리 "%b()"
2를 이용하여 괄호 안에 모든 문자열 이송