如何将字符之前的一部分字符串匹配到一个变量中,并将其之后的所有部分匹配到另一个变量中

How to match a part of string before a character into one variable and all after it into another

我无法根据特殊字符将字符串分成两部分。

例如:

12345#data

1234567#data

第一部分有 5-7 个字符,第二部分用 "#" 分隔,其他数据在哪里(字符,数字,无关紧要)

我需要将 # 两侧的两个部分存储在两个变量中:

x = 12345
y = data 

没有 "#" 个字符。

我一直在寻找一些 Lua 字符串函数,例如 splitOn("#") 或 substring until character,但我还没有找到。

参见this documentation

First of all, although Lua does not have a split function is its standard library, it does have string.gmatch, which can be used instead of a split function in many cases. Unlike a split function, string.gmatch takes a pattern to match the non-delimiter text, instead of the delimiters themselves

借助 否定字符 classstring.gmatch:

可以轻松实现
local example = "12345#data"
for i in string.gmatch(example, "[^#]+") do
  print(i)
end

IDEONE demo

[^#]+ 模式匹配除 # 之外的一个或多个字符(因此,它 "splits" 一个包含 1 个字符的字符串)。

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

s = "12345#data"
a,b = s:match("(.+)#(.+)")
print(a,b)