将带有数字的字符串转换为表格

如何将以下字符串转换为表格:

string = "1,2,3,4"

转换后为:

table = {1,2,3,4}

感谢任何帮助;)

点赞
用户6632736
用户6632736

下面是从 MediaWikiScribunto 扩展中修改的代码。它允许在比一个字符更长的模式上分割字符串。

-- 迭代器工厂
function string:gsplit (pattern, plain)
    local s, l = 1, self:len()
    return function ()
        if s then
            local e, n = self:find (pattern, s, plain)
            local ret
            if not e then
                ret = self:sub (s)
                s = nil
            elseif n < e then
                -- 空分隔符!
                ret = self:sub (s, e)
                if e < l then
                    s = e + 1
                else
                    s = nil
                end
            else
                ret = e > s and self:sub (s, e - 1) or ''
                s = n + 1
            end
            return ret
        end
    end, nil, nil
end

-- 返回一个表格的分割函数:
function string:split (pattern, plain)
    local ret = {}
    for m in self:gsplit (pattern, plain) do
        ret [#ret + 1] = m
    end
    return ret
end

-- 测试:
local str = '1,2, 3,4'
print ('table {' .. table.concat (str:split '%s*,%s*', '; ') .. '}')
2020-10-22 03:49:49
用户7396148
用户7396148

你可以使用gmatch和模式(%d +)创建迭代器,然后填充表格。

local input = "1,2,3,4"
local output = {}

for v in input:gmatch("(%d+)") do
  table.insert(output, tonumber(v))
end

for _,v in pairs(output) do
  print(v)
end

模式(%d +)将捕获任何数量的数字(0-9)。

这是一个狭窄的解决方案,它不能处理空条目,例如

input = "1,2,,4"
output = {1,2,4}

它也不关心分隔符是什么,或者它是否一致适用于每个条目。

input = "1,2 3,4"
output = {1,2,3,4}

参考:

[Lua 5.3手册,第6.4节-字符串操作:string.gmatch](https://www.lua.org/manual/5.3/manual.html#pdf-string.gmatch)

[FHUG:了解Lua的模式](https://www.fhug.org.uk/ 网站/wiki/wiki/doku.php?id=plugins:understanding_lua_patterns)

2020-10-22 14:27:40
用户107090
用户107090

让 Lua 做繁重的工作:

s="1,2,3,4"
t=load("return {"..s.."}")()
for k,v in ipairs(t) do print(k,v) end
2020-10-22 16:32:54