如果某件事没有其他事情发生,就匹配

我试图解析一个字符串并从中提取一些数字。 基本上,任何2-3位都应该匹配,除了那些在他们面前有“测试”的。 这里有些例子:

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} - 正确匹配数字,但也匹配前面的字符(_或。)。

我知道这可能是一个重复的正则表达式匹配的东西,如果它没有其他的东西,但我不能在那里得到我的答案。


不幸的是,没有办法使用单个模式来匹配没有在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演示

在这里, s:gsub("TEST%d+","")将删除TEST<digits>+%d+模式,用于string.gmatch将提取所有保留的数字块。

链接地址: http://www.djcxy.com/p/77025.html

上一篇: Match if something is not preceded by something else

下一篇: Match words not beginning with &