在新行上拆分字符串,但包括空行
Split a string on new lines, but include empty lines
假设我有一个包含内容的字符串
local my_str = [[
line1
line2
line4
]]
我想得到以下 table:
{"line1","line2","","line4"}
换句话说,我希望空行 3 包含在我的结果中。我尝试了以下方法:
local result = {};
for line in string.gmatch(my_str, "[^\n]+") do
table.insert(result, line);
end
但是,这会产生一个不包含空行 3 的结果。
如何确保包含空行?我只是使用了错误的正则表达式吗?
试试这个:
local result = {};
for line in string.gmatch(my_str .. "\n", "(.-)\n") do
table.insert(result, line);
end
如果你不想要给你的那个空的第五个元素,那就去掉my_str
末尾的空行,像这样:
local my_str = [[
line1
line2
line4]]
(请注意,长文本开头的换行符会被忽略,但末尾的换行符不会被忽略。)
您可以将 +
替换为 *
,但这不适用于所有 Lua 版本; LuaJIT 会在您的结果中添加随机的空字符串(这在技术上什至没有错误)。
如果你的字符串总是在最后一行的末尾包含一个换行符,就像你的例子一样,你可以做类似 "([^\n]*)\n"
的事情来防止随机空字符串和最后一个空字符串。
在 Lua 5.2+ 中,您还可以只使用边界模式来检查换行符或字符串结尾:[^\n]*%f[\n[=14=]]
,但这在 [=25 中不起作用=]JIT 要么。
如果您需要支持 LuaJIT 并且 实际字符串中没有尾随换行符,那么您可以手动添加它:
string.gmatch(my_str .. "\n", "([^\n]*)\n")
假设我有一个包含内容的字符串
local my_str = [[
line1
line2
line4
]]
我想得到以下 table:
{"line1","line2","","line4"}
换句话说,我希望空行 3 包含在我的结果中。我尝试了以下方法:
local result = {};
for line in string.gmatch(my_str, "[^\n]+") do
table.insert(result, line);
end
但是,这会产生一个不包含空行 3 的结果。
如何确保包含空行?我只是使用了错误的正则表达式吗?
试试这个:
local result = {};
for line in string.gmatch(my_str .. "\n", "(.-)\n") do
table.insert(result, line);
end
如果你不想要给你的那个空的第五个元素,那就去掉my_str
末尾的空行,像这样:
local my_str = [[
line1
line2
line4]]
(请注意,长文本开头的换行符会被忽略,但末尾的换行符不会被忽略。)
您可以将 +
替换为 *
,但这不适用于所有 Lua 版本; LuaJIT 会在您的结果中添加随机的空字符串(这在技术上什至没有错误)。
如果你的字符串总是在最后一行的末尾包含一个换行符,就像你的例子一样,你可以做类似 "([^\n]*)\n"
的事情来防止随机空字符串和最后一个空字符串。
在 Lua 5.2+ 中,您还可以只使用边界模式来检查换行符或字符串结尾:[^\n]*%f[\n[=14=]]
,但这在 [=25 中不起作用=]JIT 要么。
如果您需要支持 LuaJIT 并且 实际字符串中没有尾随换行符,那么您可以手动添加它:
string.gmatch(my_str .. "\n", "([^\n]*)\n")