Lua:替换字符串中的字符列表

Fáb*_*rez 9 string lua substitution lua-patterns

是否可以根据Lua中的列表替换字符,就像tr在Perl中一样?例如,我想替换ABBA( AABBCCBBAACC).

在Perl中,解决方案是$str ~= tr/AB/BA/.在Lua有这种本地方式吗?如果没有,我认为最好的解决方案是迭代整个字符串,因为单独的替换需要使用特殊符号来区分已经替换的字符和非字符的字符.

编辑:我的目标是计算反向互补的DNA串,描述在这里.

Yu *_*Hao 12

string.gsub可以把表作为第三个参数.使用第一个捕获作为键,查询每个匹配的表,并将关联的值用作替换字符串.如果值为nil,则不会更改匹配.

所以你可以像这样构建一个帮助器表:

local s = "AABBCC"
local t = {A = "B", B = "A"}
local result = string.gsub(s, "[AB]", t)
print(result)
Run Code Online (Sandbox Code Playgroud)

或者同样的单线:

print((string.gsub("AABBCC", "[AB]", {A = "B", B = "A"})))
Run Code Online (Sandbox Code Playgroud)

输出:

BBAACC
Run Code Online (Sandbox Code Playgroud)

对于像这样的单字符模式"[AB]","."也可以工作,因为表中未找到的任何内容都不会被更改.(但我不认为这更有效)但对于一些更复杂的情况,需要一个好的模式.

以下是Lua中编程的示例:此函数将字符串中varname每次出现的全局变量值替换为$varname:

function expand (s)
    return (string.gsub(s, "$(%w+)", _G))
end
Run Code Online (Sandbox Code Playgroud)