Design patterns 按点lua拆分字符串
我试图用一个点分割一个字符串,但保留两个(或更多)点 我的方法是这样的,只适用于双点:Design patterns 按点lua拆分字符串,design-patterns,lua,Design Patterns,Lua,我试图用一个点分割一个字符串,但保留两个(或更多)点 我的方法是这样的,只适用于双点: local s=“一些字符串..添加了几个点…更多点。插入了另一行。”; 对于s:gsub('%.%.','#&')中的行:gmatch('[^%.]+')do 打印(行:gsub(“#&”、“…”); 结束 另一种方法是这样的 print(s:match('([^%.]+[%.]*[^%.]+')) 它在下一个点序列后停止,因此不适合 如何在模式匹配中实现这一点?另一种方法: local s = 'some
local s=“一些字符串..添加了几个点…更多点。插入了另一行。”;
对于s:gsub('%.%.','#&')中的行:gmatch('[^%.]+')do
打印(行:gsub(“#&”、“…”);
结束
另一种方法是这样的
print(s:match('([^%.]+[%.]*[^%.]+'))
它在下一个点序列后停止,因此不适合
如何在模式匹配中实现这一点?另一种方法:
local s = 'some string.. with several dots, added....more dots.another line inserted.'
function split_on_single_dot(s)
local ans, old_pos = {}, 1
for pos,dots in (s..(s:sub(-1) == '.' and '' or '.')):gmatch '()(%.+)' do
if #dots == 1 then
ans[#ans+1] = s:sub(old_pos,pos-1)
old_pos = pos+1
end
end
return ipairs(ans)
end
-- test
for i,v in split_on_single_dot(s) do print(i,v) end
对于s:gsub(“%.%.+”)中的行,函数(d)返回(“\0”):rep(#d)end):gmatch“[^.]+”执行打印(行:gsub(“%z”,”))end
@EgorSkriptunoff,确保它不是regex,但完成了任务,谢谢!5分钟,但记得选择这个作为答案,再次谢谢你,伙计。
local s = 'some string.. with several dots, added....more dots.another line inserted.'
for line in s:gsub("%f[.]%.%f[^.]", "\0"):gmatch"%Z+" do
print(line)
end