Lua 代码中遇到的问题
2016-10-20 3:23:41
收藏:0
阅读:142
评论:1
如何匹配带有括号的句子中的单词,以空格分隔。例如:
split_words_and_parenthesis("1791 (AR6K Async) S 2 ") --> {"1791","AR6K Async","S","2"}
这是我尝试的代码: str = "1791 (AR6K Async) S 2 "
for val in str:gmatch("%S+") do
if str:gmatch("(") then
str:gsub("%b()" , function(s) val=s end)
print(val)
else
print(val)
end
end
输出结果:
(AR6K Async)
(AR6K Async)
(AR6K Async)
(AR6K Async)
(AR6K Async)
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果你知道格式,可以使用 string.match 来解决:
str = "1791 (AR6K Async) S 2 " s1 = str:match("(%d%d%d%d)%s%(.*%)%s.+%s.+") s2 = str:match("%d%d%d%d%s(%(.*%))%s.+%s.+") s3 = str:match("%d%d%d%d%s%(.*%)%s(.+)%s.+") s4 = str:match("%d%d%d%d%s%(.*%)%s.+%s(.+)") print(s1) print(s2) print(s3) print(s4)另一个通用解决方案,允许变量数量的输入(尝试一下:只需在 lua 解释器中粘贴):
function get_separate_words(str) local i = 1 local words = {} function get_parentheses_content(str,is_recursively_called) local i = 1 local function split(s, sep) local fields = {} local sep = sep or ":" local pattern = string.format("([^%s]+)", sep) string.gsub(s, pattern, function(c) fields[#fields + 1] = c end) return fields end for j = 1,#str do local c = string.sub(str,j,j) local d = string.sub(str,j+1,j+1) if j <= i then elseif c == "(" then i = j + #get_parentheses_content(string.sub(str,j+1,#str),true) + 2 elseif c == ")" and (is_recursively_called or (d == " ") or (not d)) then print('c') local parentheses_content = string.sub(str,1,j-1) return {parentheses_content} end end local parentheses_content = string.match(str,"^(.*)%)%s+[^)]*$") if parentheses_content then print('a') end parentheses_content = parentheses_content or string.match(str,"^(.*)%)$") if parentheses_content then print("A") return {parentheses_content} else print("B") return split("("..str," ") end end local function merge(table_a, table_b) table_a = table_a or {} table_b = table_b or {} for k_b, v_b in pairs(table_b) do if type(v_b) == "table" and type(table_a[k_b] or false) == "table" then merge(table_a[k_b], table_b[k_b]) else table_a[k_b] = v_b end end return table_a end for j = 1,#str do local c = string.sub(str,j,j) if j < i then elseif c == " " or j == #str then local word = string.gsub(string.sub(str,i,j)," ","") if #word > 0 then table.insert(words, word) print(word) end i = j+1 elseif c == "(" then local all_characters_after_opening_parentheses = string.sub(str,j+1,#str) local parentheses_content = get_parentheses_content(all_characters_after_opening_parentheses)[1] table.insert(words, parentheses_content) j= j+#parentheses_content+2 i = j end end return words end separate_words = get_separate_words("1791 (AR6(K As)ync) S 2 )") for k,v in ipairs(separate_words) do print(k,v) end