Lua中的一次分割函数

我想只对字符串进行一次分割,使输出结果看起来像这样:

STRING1: STRING.STRING1.STRING2

OUT1: STRING
OUT2: STRING1.STRING2

我试着写了一个函数,因为我找不到别人写的函数,而它有点像工作了。出于某些原因,如果将分隔符设置为“.”,那么函数就完全停止工作,并将默认的开始和结束值设置为1,1。因此,我的当前输出为:

STRING1: STRING.STRING1.STRING2

OUT1:
OUT2: TRING.STRING1.STRING2

有人知道我在这个函数中做错了什么吗?

function splitOnce(inputstr, sep)
    local s, e = inputstr:find(sep)

    local t = {}

    --print(inputstr)
    --print(sep)
    --print("start: "..tostring(s)..", end: "..tostring(e))

    table.insert(t, inputstr:sub(1, s - 1))
    table.insert(t, inputstr:sub(e + 1, -1))

    return t
end

原文链接 https://stackoverflow.com/questions/70261907

点赞
stackoverflow用户7396148
stackoverflow用户7396148

你可以使用match通过一个具有2个捕获组的模式来分离字符串。 这里我使用(.-)%".. sep .."(.+),其中.-将捕获分隔符之前的最短可能字符串,而+将捕获其之后的所有内容。

这种方法的一个限制是分隔符是转义的,因此,如果您使用像dw或另一个在模式中作为特殊字符的字母作为分隔符,则它将无法按预期工作,但对于所有单个字符标点符号分隔符都应该可以工作。

function splitOnce(inputstr, sep)
    local prefix, suffix = inputstr:match("(.-)%".. sep .."(.+)")

    local t = {}

    print(inputstr)
    print(sep)
    print("prefix: "..tostring(prefix)..", suffix: "..tostring(suffix))

    table.insert(t, prefix)
    table.insert(t, suffix)

    return t
end

splitOnce("STRING.STRING1.STRING2", ".")

输出

STRING.STRING1.STRING2

.

prefix: STRING, suffix: STRING1.STRING2

2021-12-07 15:23:54