匹配不以某些字符开始的字符串

我正在尝试解析一个字符串并从中提取一些数字。基本上,应该匹配任何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,但我在那里找不到答案。

点赞
用户3832970
用户3832970

很遗憾,在 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 一起使用将提取剩余的所有数字块。

2017-10-06 06:45:22