我在 Lua 脚本中得到了这个字符串:
one;two;;three;four;;five;;six;seven;
第一个字符永远不会是分号。中间的分隔符可以是单分号或双分号,最后一个字符可以是单分号也可以不是。
使用 Lua 模式(和 string.gsub()
):如何匹配中间的双分号以将其替换为单个分号并删除最后一个可选分号?
输出必须是这样的:
one;two;three;four;five;six;seven
使用单一模式可以实现这一点吗?
最佳答案
使用一种模式将多个 ;
替换为单个 ;
,并使用另一种模式删除最后一个 ;
如下
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)
我想要做的是将三个 ;
附加到字符串末尾,因此任何一两个 ;
应替换为一个 ;
。还有更多 ;
(可以是三个或四个,并且必须在末尾)被替换为空字符串。
我更喜欢具有两种模式的解决方案,因为它更清晰。
关于string - Lua 模式替换多个分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19852115/