我试图将一个字符串分割成一个点,但保留两个(或更多)点。
我的方法是这样的,仅适用于双点:
local s = "some string.. with several dots, added....more dots.another line inserted.";
for line in s:gsub('%.%.','#&'):gmatch('[^%.]+') do
print(line:gsub('#&','..'));
end
另一种方法是这样
print(s:match('([^%.]+[%.]*[^%.]+)'))
在下一个点序列之后会暂停,因此不合适。
我该如何在模式匹配中做到这一点?
答案 0 :(得分:0)
另一种方法:
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
答案 1 :(得分:0)
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