在lua中拆分一次功能
Posted
技术标签:
【中文标题】在lua中拆分一次功能【英文标题】:Split once function in lua 【发布时间】:2022-01-12 15:08:54 【问题描述】:我只想将一个字符串拆分一次,所以输出如下所示:
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
【问题讨论】:
find(sep, 1, true)
我试过你的,它返回了nil
,并带有分隔符"."
string.find("STRING1: STRING.STRING1.STRING2", ".", 1, true)
返回 16 16
而不是 nil
【参考方案1】:
您可以使用match 使用具有 2 个捕获的模式来分隔字符串。
这里我使用(.-)%".. sep .."(.+)
,其中.-
将捕获分隔符之前的最短字符串,.+
将捕获它之后的所有内容。
此方法的一个限制是分隔符被转义,因此,如果您使用分隔符,例如 d
、w
,或其他作为魔术字符的字母,它将无法按预期工作,它应该但适用于所有单字符标点分隔符。
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
.
前缀:STRING,后缀:STRING1.STRING2
【讨论】:
以上是关于在lua中拆分一次功能的主要内容,如果未能解决你的问题,请参考以下文章