在 lua 中拆分一次函数

Split once function in 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

您可以使用 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