string - Lua 模式替换多个分号

标签 string lua lua-patterns

我在 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/

相关文章:

string - T-SQL将单词拆分为字符

ios - 如何在 Swift 中获取 DatePicker 时间到 Calendar 组件并插入到 Label 组件

lua - 如何在lua中提取32位int的4个字节

android - 如何使分数增加触摸分数?

lua - 如何在 Lua 函数上使用参数

Lua string.gsub 里面的 string.gmatch?

c# - 如何将字符串中的 "/"替换为 "\/"?

Java数组问题

string - Lua string.gsub具有多个模式

lua - 试图理解 Lua 简单代码