You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:11:07