如何读取多行分隔的字符串?Lua中拆分转数组的方法问询
没问题,我来帮你搞定这个Lua里处理多行/空格分隔字符串的问题!
核心思路:把分隔的字符串拆分成数组
不管你的原始字符串是多行换行分隔还是空格分隔(甚至两者混合),我们可以通过Lua的字符串匹配功能来实现拆分,最终得到你想要的local names = {"Noba", "Detalle"}这样的数组。
方案1:通用处理(兼容换行+空格混合的情况)
如果你的字符串里既有换行又有空格,或者不确定分隔符类型,用这个万能分割函数,它会把所有空白字符(换行、空格、制表符等)都当作分隔符,提取所有非空白的内容:
function split_whitespace(str) local names = {} -- 匹配所有连续的非空白字符序列 for name in string.gmatch(str, "%S+") do table.insert(names, name) end return names end
使用示例
假设你从PHPMyAdmin获取到的原始字符串是这样的:
-- 可能是多行,也可能是带空格的单行 local raw_data = [[Noba Detalle Test User]]
调用函数就能得到目标数组:
local names = split_whitespace(raw_data) -- 此时names = {"Noba", "Detalle", "Test", "User"}
方案2:仅按换行分割(如果确定是纯多行格式)
如果你的数据是严格按换行分隔,没有多余的空格,那可以专门按换行符来拆分,还能顺便过滤空行和每行前后的空白:
function split_newline(str) local names = {} -- 按换行符分割每行 for line in string.gmatch(str, "[^\n]+") do -- 去掉每行前后的空格 local trimmed_line = string.gsub(line, "^%s*(.-)%s*$", "%1") -- 跳过空行 if trimmed_line ~= "" then table.insert(names, trimmed_line) end end return names end
使用示例
local raw_data = [[Noba Detalle]] local names = split_newline(raw_data) -- 此时names = {"Noba", "Detalle"}
验证结果
你可以通过循环打印数组来确认是否正确:
for index, name in ipairs(names) do print(string.format("第%d个名称:%s", index, name)) end
内容的提问来源于stack exchange,提问作者dohdle




