如何将字符前的字符串部分匹配到一个变量中,然后将其全部匹配到另一个变量中

时间:2016-02-04 11:10:21

标签: string lua lua-patterns

我在使用特殊字符将字符串拆分为两部分时遇到问题。

例如:

12345#data

1234567#data

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

我需要在#的每一侧以两个变量存储两个部分:

x = 12345
y = data 

没有"#"字符。

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

2 个答案:

答案 0 :(得分:9)

请参阅this documentation

  

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

借助带有string.gmatch否定字符类,可以轻松实现:

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

请参阅IDEONE demo

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

答案 1 :(得分:8)

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

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