需求:满足取以下字符串的特定子集
小爱同学 -> 小爱同学,爱同学,同学
小度小度 -> 小度小度,度小度,小度
Hello Mary -> Hello Mary
Hello Mary Jon -> Hello Mary Jon, Mary Jon
小biu小bin -> 小biu小bin, biu小bin, 小bin
小biu 小bin -> 小biu小bin, biu 小bin, 小bin //带空格
local word = wkupret.word
local ret = {};
local f = '[%z\1-\127\194-\244][\128-\191]*';
for v in word:gfind(f) do
table.insert(ret, {c=v,isChinese=(#v~=1)});
end
-- 到此通过正则将字符串分割成单个字符,
-- 比如小爱同学->小,爱,同,学
-- 比如小biu小bin->小,b,i,u,小,b,i,u
local ret_t = {}
local temp = ''
local len = 0
for k, v in ipairs(ret) do
if v.isChinese or v.c == ' ' then
if temp ~= '' then
len = len + 1
table.insert(ret_t, len, temp)
temp = ''
end
len = len + 1
table.insert(ret_t, len, v.c);
else
temp = temp .. v.c
end
end
if temp ~= '' then
len = len + 1
table.insert(ret_t, len, temp)
end
-- 到此实际上已经完整切割并在组装特殊字符串(中英文混合)的同时,按顺序将结果存储到了 ret_t 中
-- 比如小爱同学->{小,爱,同,学}
-- 比如小biu小bin->{小, biu, 小, biu}
local startIndex = 2
local wordUnion = word
if len >2 then
local endIndex = len -1
if ret_t[len-1] == ' 'then
endIndex = endIndex -1
end
for i=startIndex, endIndex, 1 do
local t = table.concat(ret_t, '', i, len)
-- 查找空格的位置,是为了排重,如果空格在第一个位置,那么实际上该字符串和下一个字符串差别仅仅是第一个有效字符前是否有空格
local index = string.find(t, ' ')
if index ~= 1 then
wordUnion = wordUnion .. ',' .. t
end
end
end