lua 截取部分字符串子集

需求:满足取以下字符串的特定子集
小爱同学 -> 小爱同学,爱同学,同学
小度小度 -> 小度小度,度小度,小度
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值