如何将字符串中某个字符之前的部分与之后的部分分别存储到两个变量

我在将字符串根据特定字符分割为两个部分时遇到了问题。

例如:

12345#data

或者

1234567#data

第一部分包含了 5-7 个字符,与第二部分通过 "#" 分隔开来,第二部分包含了其他数据(字符或数字均可)。

我需要将每个部分去掉 "#" 字符,存储到两个变量中:

x = 12345
y = data

我查找了一些 Lua 字符串操作函数,例如 splitOn("#") 或截取某个字符之前的部分,但我并没有找到合适的函数。

点赞
用户3832970
用户3832970

首先,Lua 并没有标准库中的 split 函数,但它有 string.gmatch 函数,该函数可以在许多情况下代替 split 函数使用。与 split 函数不同的是,string.gmatch 函数使用匹配非分隔符文本的模式,而不是分隔符本身。

可以在 string.gmatch 的帮助下轻松实现一个基于“否定字符类”的函数:

local example = "12345#data"
for i in string.gmatch(example, "[^#]+") do
  print(i)
end

请参见 IDEONE 演示

[^#]+ 模式匹配除 # 之外的一个或多个字符,因此它“拆分”字符串,其中包含 1 个字符。

2016-02-04 11:13:31
用户107090
用户107090

使用string.match和捕获。 尝试这个:

s = "12345#data"
a,b = s:match("(.+)#(.+)")
print(a,b)
2016-02-04 11:34:07