Lua中如何使用多个分隔符拆分字符串?

3
我想将一个字符串按多个分隔符分割成数组。
local delim = {",", " ", "."}
local s = "a, b c .d e , f 10, M10 , 20,5"

结果表应该长这样:

{"a", "b", "c", "d", "e",  "f", "10", "M10", "20", "5"}

分隔符可以是空格、逗号或点。如果两个分隔符(如空格和逗号)相邻,它们应该被合并,多余的空格应该被忽略。
1个回答

5
此代码通过构建分隔符集的补集模式来拆分字符串。
local delim = {",", " ", "."}
local s = "a, b c .d e , f 10, M10 , 20,5"
local p = "[^"..table.concat(delim).."]+"
for w in s:gmatch(p) do
        print(w)
end

将代码改编为将“单词”保存在表格中。


2
用户定义的分隔符中是否允许包含右括号]、百分号%和破折号- - Egor Skriptunoff
1
我通常使用这个函数来避免这样的问题: function escape_magic(s) local MAGIC_CHARS_SET = '[()%%.[^$%]*+%-?]' if s == nil then return end return (s:gsub(MAGIC_CHARS_SET,'%%%1')) end - tonypdmtr
@tonypdmtr - 为什么不直接使用 (s:gsub("%p", "%%%0")) - Egor Skriptunoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接