Lua: 将字符串中的一组字符替换
2013-11-6 0:46:42
收藏:0
阅读:135
评论:2
在 Lua 中是否有像 Perl 中的 tr 一样的按照列表替换字符的方法?例如,我想把 A 替换成 B,把 B 替换成 A(例如,AABBCC 变成 BBAACC)。在 Perl 中,解决方案是 $str ~= tr/AB/BA/。在 Lua 中是否有本机的解决方案?如果没有,我认为最好的解决方案是遍历整个字符串,因为单独的替换需要使用特殊符号来区分已经被替换和未被替换的字符。编辑:我的目标是计算 DNA 字符串的 _反相互补_(如此处所述)。
点赞
用户1009479
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
2013-11-05 05:56:37
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
下面的代码将每个字符都替换为所需的映射(如果没有映射存在,则保持不变)。 如果您知道字符的确切范围,则可以修改 "tr" 中 "string.gsub" 的第二个参数为更具体的内容。
s = "AABBCC" mappings = {["A"]="B",["B"]="A"} function tr(s,mappings) return string.gsub(s, "(.)", function(m) -- print("found",m,"replace with",mappings[m],mappings[m] or m) if mappings[m] == nil then return m else return mappings[m] end end ) end print(tr(s,mappings))输出结果为
henry@henry-pc:~/Desktop$ lua replace.lua found A replace with B B found A replace with B B found B replace with A A found B replace with A A found C replace with nil C found C replace with nil C BBAACC 6