Lua string.gmatch语法优化:提取带+的技能加成数据
Lua string.gmatch 处理技能加成匹配方案
直接用这个匹配模式就能满足你的所有需求:
"%s*%+(%d+)%s+(.-)%s*(,|$)"
模式拆解(对应你的需求):
%s*:匹配+前面的任意空格,满足**忽略"+前的空格"**的要求%+:匹配符号+,自动过滤掉不含+的内容,满足忽略不含"+"的行的要求(%d+):捕获+后面的数字,作为bonus返回,满足提取数字作为bonus的要求%s+:匹配数字后面的空格(.-):非贪婪模式捕获后续内容,直到遇到逗号或字符串结尾,作为skill返回,满足提取"+数字"后的剩余内容的要求%s*:去掉技能名称后面的多余空格(,|$):匹配分隔逗号或字符串结尾,确保完整捕获每个技能项
完整代码示例
local buildings = { ["building1"] = { effect = "+1 Improve Lifestyle, +1 Quell Unrest (Magic), random note"}, ["building2"] = { effect = "+2 Hire Adventurers, +1 Trade Commodities"}, ["building3"] = { effect = "just some random notes"} } -- 遍历所有建筑的effect字段 for _, bld in pairs(buildings) do -- 用目标模式提取有效加成 for bonus, skill in string.gmatch(bld.effect, "%s*%+(%d+)%s+(.-)%s*(,|$)") do print(string.format("bonus=%s, skill=%s", bonus, skill)) end end
运行这段代码会输出你期望的结果:
bonus=1, skill=Improve Lifestyle bonus=1, skill=Quell Unrest (Magic) bonus=2, skill=Hire Adventurers bonus=1, skill=Trade Commodities
内容的提问来源于stack exchange,提问作者user2316707
相关产品推荐
相关产品推荐

