如何将字符之前的一部分字符串匹配到一个变量中,并将其之后的所有部分匹配到另一个变量中
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,但我还没有找到。
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
借助 否定字符 class 和 string.gmatch
:
可以轻松实现
local example = "12345#data"
for i in string.gmatch(example, "[^#]+") do
print(i)
end
[^#]+
模式匹配除 #
之外的一个或多个字符(因此,它 "splits" 一个包含 1 个字符的字符串)。
使用string.match
并捕获。
试试这个:
s = "12345#data"
a,b = s:match("(.+)#(.+)")
print(a,b)
我无法根据特殊字符将字符串分成两部分。
例如:
12345#data
或
1234567#data
第一部分有 5-7 个字符,第二部分用 "#"
分隔,其他数据在哪里(字符,数字,无关紧要)
我需要将 #
两侧的两个部分存储在两个变量中:
x = 12345
y = data
没有 "#"
个字符。
我一直在寻找一些 Lua 字符串函数,例如 splitOn("#")
或 substring until character,但我还没有找到。
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
借助 否定字符 class 和 string.gmatch
:
local example = "12345#data"
for i in string.gmatch(example, "[^#]+") do
print(i)
end
[^#]+
模式匹配除 #
之外的一个或多个字符(因此,它 "splits" 一个包含 1 个字符的字符串)。
使用string.match
并捕获。
试试这个:
s = "12345#data"
a,b = s:match("(.+)#(.+)")
print(a,b)