使用string.gmatch()将字符串按\n或\r拆分。

一个简单的模式应该可以胜任这项工作,但我无法想出/找到有效的内容。

我想要像这样的东西:

lines = string.gmatch(string, "^\r\n")
点赞
用户4971456
用户4971456

我找到了答案:使用 "[^\r\n]+"('+'是用于跳过空行)。

以前,我故意避免使用括号,因为我认为它表示一个不支持转义的特殊字符串字面量。嗯,那是不正确的。是双括号做到了这一点。

Lua string.gsub() by '%s' or '\n' pattern

2015-09-29 15:06:33
用户1823636
用户1823636

将一个字符串分割成表格(数组)可以使用以下方法:

str = "qwe\nasd\rzxc"
lines = {}
for s in str:gmatch("[^\r\n]+") do
    table.insert(lines, s)
end
2015-09-29 15:09:09
用户1221703
用户1221703

重要提示 - 使用gmatch方法来去除分隔符的解决方案无法匹配两个换行符之间的空字符串,因此如果您想像正常的拆分实现一样保留它们(例如,比较两个文档中的行),最好匹配分隔符,如以下示例:

function string:split(delimiter)
  -- 将结果存储在表格中
  local result = {}
  -- 设置迭代所需的起始点
  local from = 1
  -- 查找下一个要分割的文本
  local delim_from, delim_to = string.find(self, delimiter, from)
  -- 只要还有要分割的文本
  while delim_from do
    -- 将已找到的文本添加到结果中
    table.insert(result, string.sub(self, from , delim_from-1))
    -- 更新起始点以继续搜索
    from = delim_to + 1
    -- 查找下一个要分割的文本
    delim_from, delim_to = string.find(self, delimiter, from)
  end
  -- 添加最后一部分文本至结果中
  table.insert( result, string.sub( self, from ) )
  -- 返回结果
  return result
end

感谢https://gist.github.com/jaredallard/ddb152179831dd23b230

2018-08-17 10:41:48