gpt4 book ai didi

regex - 在lua中使用指定的分隔符分割字符串

转载 作者:行者123 更新时间:2023-12-04 17:44:33 24 4
gpt4 key购买 nike

当默认为空格时,我正在尝试通过选择用定界符在lua中创建split()函数。
默认工作正常。当我给函数定界符时,问题就开始了。由于某种原因,它不返回最后一个子字符串。
功能:

function split(str,sep)
if sep == nil then
words = {}
for word in str:gmatch("%w+") do table.insert(words, word) end
return words
end
return {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))} -- BUG!! doesnt return last value
end

我尝试运行此:
local str = "a,b,c,d,e,f,g"
local sep = ","
t = split(str,sep)
for i,j in ipairs(t) do
print(i,j)
end

我得到:
1   a
2 b
3 c
4 d
5 e
6 f

无法找出错误的位置...

最佳答案

分割字符串时,最简单的避免极端情况的方法是在字符串后面加上定界符,因为您知道字符串不能以定界符结尾:

str = "a,b,c,d,e,f,g"
str = str .. ','
for w in str:gmatch("(.-),") do print(w) end

另外,您可以使用带有可选定界符的模式:
str = "a,b,c,d,e,f,g"
for w in str:gmatch("([^,]+),?") do print(w) end

实际上,由于我们正在捕获非定界符,因此我们不需要可选的定界符:
str = "a,b,c,d,e,f,g"
for w in str:gmatch("([^,]+)") do print(w) end

关于regex - 在lua中使用指定的分隔符分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40149617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com