Lua开发问题:提取所有以$开头的单词并逐一调用API替换
Lua提取$开头通配符并替换的实现方案
步骤1:提取所有$开头的通配符
使用string.gmatch遍历目标字符串,匹配以$开头的单词(默认单词由字母、数字、下划线组成,可按需调整匹配规则),将提取到的通配符存入table,同时通过去重逻辑避免重复调用API。
示例代码:
local original_str = "Hello $name, your score is $score. $name, don't forget $task" local wildcards = {} local seen = {} -- 用于去重 -- 匹配$开头的单词,"%$%w+"表示$后跟一个或多个字母/数字/下划线 for wc in string.gmatch(original_str, "%$%w+") do if not seen[wc] then table.insert(wildcards, wc) seen[wc] = true end end -- 此时wildcards = {"$name", "$score", "$task"}
步骤2:调用API获取对应值
遍历通配符table,逐个传入API()函数,将返回值存入映射表(键为通配符,值为API返回结果),方便后续替换。
示例代码:
local wc_values = {} for _, wc in ipairs(wildcards) do -- 去掉开头的$,将纯标识符传给API(若API需接收不带$的参数) local key = string.sub(wc, 2) wc_values[wc] = API(key) end
步骤3:替换原字符串重建内容
遍历映射表,将原字符串中的每个通配符替换为对应的值。这里可以用循环替换或string.gsub配合映射表查找,按需选择。
示例代码:
local result_str = original_str for wc, val in pairs(wc_values) do result_str = string.gsub(result_str, wc, val) end print(result_str) -- 输出替换后的最终字符串
补充说明
- 如果通配符包含字母数字下划线以外的字符,可调整
string.gmatch的匹配模式,比如要匹配$后跟任意非空白字符,改用"%$[^%s]+"即可。 - 去重步骤为可选操作,若你的场景允许重复调用API,或API返回值不受重复调用影响,可以移除
seen表相关逻辑。
内容的提问来源于stack exchange,提问作者Tormy Van Cool
相关产品推荐
相关产品推荐

