是否可以根据Lua中的列表替换字符,如Perl中的tr?例如,我想用A到B和B替代A(例如AABBCC变成BBAACC). 在Perl中,解决方案是$str〜= tr / AB / BA /.有没有在Lua这样做的本地方法?如果没有,我认为最好
在Perl中,解决方案是$str〜= tr / AB / BA /.有没有在Lua这样做的本地方法?如果没有,我认为最好的解决方案是遍历整个字符串,因为单独的替换需要使用特殊的符号来区分已被替代的字符和不是的字符.
编辑:我的目标是计算DNA串的反向互补,如here所述.
string.gsub
可以拿一张表作为第三个参数.使用第一次捕获作为关键字,为每个匹配查询表,并将相关值用作替换字符串.如果该值为nil,则该匹配不会更改.
所以你可以建立一个这样的帮助表:
local s = "AABBCC" local t = {A = "B", B = "A"} local result = string.gsub(s, "[AB]", t) print(result)
或同样的一行:
print((string.gsub("AABBCC", "[AB]", {A = "B", B = "A"})))
输出:
BBAACC
对于“[AB]”,“”等单字符模式可以工作,因为在表中找不到任何东西都不会改变. (但我不认为效率更高)但是对于一些更复杂的情况,需要一个好的模式.
以下是Lua中的编程示例:该函数将字符串中每个出现的$varname的全局变量varname的值替换:
function expand (s) return (string.gsub(s, "$(%w+)", _G)) end