匹配,如果没有其他事物之前



我正在尝试解析字符串并从中提取一些数字。基本上,任何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}-仅忽略测试后的第一个数字

_[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>+string.gmatch使用的%d+模式将提取保留的所有数字块。

相关内容

最新更新