我试图删除parantheses中字符串之间的空格。但是它给出了函数的地址。
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 :(得分: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.使用Lua模式"%b()"
遍历括号内的所有字符串
2.使用:gsub("%s", "")
答案 1 :(得分: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
这很有效,但远不是我称之为“好”的解决方案。