首页 文章

匹配,如果事先没有其他东西

提问于
浏览
4

我正在尝试解析一个字符串并从中提取一些数字 . 基本上,任何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 回答

  • 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+","") 将删除与 string.gmatch 一起使用的 TEST<digits>+%d+ 模式将提取剩余的所有数字块 .

相关问题