Lua模式用于替换多个分号
2013-11-8 7:30:2
收藏:0
阅读:112
评论:5
我在 Lua 脚本中得到了这个字符串:
one;two;;three;four;;five;;six;seven;
第一个字符永远不会是分号。中间的分隔符可以是单个或双个分号,而最后一个字符可以是单个分号或没有分号。
使用 Lua 模式(和 string.gsub()):如何匹配中间的双分号以将其替换为单个分号并删除最后一个可选分号?
输出必须像这样:
one;two;three;four;five;six;seven
能否使用单个模式实现?
点赞
用户234175
如何使用如下函数:
function remove_extra_delim(s, delim)
local t = {}
for each in s:gmatch("[^"..delim.."]+") do
table.insert(t, each)
end
return table.concat(t, delim)
end
teststr = "one;two;;three;four;;five;;six;seven;"
print(remove_extra_delim(teststr, ";"))
输出结果:
one;two;three;four;five;six;seven
2013-11-08 08:09:26
用户1009655
如果分号的数量为1或2,你可以简单地执行以下操作:
string:gsub(";;", ";")
否则,其他答案将会有效。
2013-11-08 08:52:44
用户2895784
这个方法有点 hacky,但它能达到目的:
x = test:gsub(";+(.?)",
function(a)
if a == "" then
return ""
else
return ";" .. a
end
end)
2013-11-08 20:44:54
用户3735873
-- 方法一使用两个模式,但更简单,也是我首选的方法
s = 'one;two;;three;four;;five;;six;seven;'
s = s:gsub(';;',';'):gsub(';?$','')
print(s)
-- 方法二只使用一个模式(如果你确实必须只使用一个模式)
s = 'one;two;;three;four;;five;;six;seven;'
s = (s..';'):gsub(';;',';')
s = s:sub(1,#s-1)
print(s)
2015-03-31 20:29:13
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
使用一个模式将多个
;替换成一个;,另一个模式将最后一个;移除,代码如下:local str = "one;two;;three;four;;five;;six;seven;" local result = str:gsub(';+', ';'):gsub(';*$', '')使用单个模式的一种可能方法如下:
local result = (str .. ";;;"):gsub(";+", function(s) if s == ";" or s == ";;" then return ";" else return "" end end)我想做的是在字符串末尾添加三个
;,因此任何一个或两个;都应该被替换为一个;。并且更多的;(可能是三个或四个,必须在末尾)被替换为空字符串。我更喜欢使用两个模式的解决方案,因为它更清晰。