Lua 分割字符串并包含分隔符

我在 Google 和 Stack Overflow 上搜索了一下,没有找到这个问题的答案。在看了文档之后,我没有找到如何做到包含分隔符的分割函数,因为每个函数都将分隔符排除在外。

编辑

for i, word in pairs(split(text, "<(.-)>")) do
    print(word)
end

function split(string, delimiter) -- 这个函数来自于 https://helloacm.com/split-a-string-in-lua/
    result = {};

    for match in (string..delimiter):gmatch("(.-)"..delimiter) do
        table.insert(result, match);
    end

    return result;
end

这个代码替换了格式为 "<(.-)>" 的部分

例子:

输入: "Hello<a>World</a>!"

预期输出: {"Hello", "<a>", "World", "</a>", "!"}

真正的输出: {"Hello", "World", "!"}
点赞
用户3735873
用户3735873

我认为这与HTML标签或类似内容有关。

我能想到一个快速而简单的解决方案,可以覆盖您的特定用例,代码如下:

s = 'Hello<a>World</a>!'

function split(s)
  local ans = {}
  for a,b in (s..'<>'):gmatch '(.-)(%b<>)' do
    ans[#ans+1] = a
    ans[#ans+1] = b
  end
  ans[#ans] = nil
  return ans
end

for _,v in ipairs(split(s)) do
  print(v)
end
2016-03-02 22:35:35
用户1847592
用户1847592
s = "Hello<a>World</a>!"
for a in s:gsub('%b<>','\0%0\0'):gmatch'%Z+' do
  print(a)
end

输出结果如下:

Hello
<a>World</a>
!

代码解释:将字符串 s 中的所有由一对尖括号括起来的子字符串分离出来,然后逐个输出。具体实现方式是先将每个子字符串用 null(即 "\0")包围,然后使用 %Z+ 模式匹配非零次的字符序列。

2016-03-03 10:49:39