如果事情之前没有其他内容,请进行匹配

时间:2017-10-06 06:01:34

标签: regex lua lua-patterns

我试图解析一个字符串并从中提取一些数字。基本上,任何2-3个数字都应该匹配,除了那些有" TEST"在他们面前。以下是一些例子:

TEST2XX_R_00.01.211_TEST => 00, 01, 211
TEST850_F_11.22.333_TEST => 11, 22, 333
TESTXXX_X_12.34.456      => 12, 34, 456

以下是我尝试过的一些事情:

(?<!TEST)[0-9]{2,3} - 仅忽略TEST后的第一个数字

_[0-9]{2,3}|\.[0-9]{2,3} - 正确匹配数字,但也匹配前面的字符(_或。)。

我知道这可能与regex for matching something if it is not preceded by something else重复,但我无法在那里得到答案。

1 个答案:

答案 0 :(得分:1)

不幸的是,没有办法使用单个模式来匹配Lua中没有先前序列的字符串(请注意,您甚至不能依靠捕获您需要的替代方案,因为TEST%d+|(%d+)将不适用于Lua,Lua模式不支持交替)。

您可以删除所有以TEST +后面的数字开头的子字符串,然后提取数字块:

local s = "TEST2XX_R_00.01.211_TEST"
for x in string.gmatch(s:gsub("TEST%d+",""), "%d+") do  
    print(x)
end

请参阅Lua demo

此处s:gsub("TEST%d+","")将移除TEST<digits>+%d+使用的string.gmatch模式将提取剩余的所有数字块。