如果某物之前没有其他东西则匹配
Match if something is not preceded by something else
我正在尝试解析一个字符串并从中提取一些数字。基本上,应该匹配任何 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 重复,但我在那里找不到答案。
不幸的是,无法使用单一模式来匹配 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
此处,s:gsub("TEST%d+","")
将删除 TEST<digits>+
,与 string.gmatch
一起使用的 %d+
模式将提取所有剩余的数字块。
我正在尝试解析一个字符串并从中提取一些数字。基本上,应该匹配任何 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 重复,但我在那里找不到答案。
不幸的是,无法使用单一模式来匹配 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
此处,s:gsub("TEST%d+","")
将删除 TEST<digits>+
,与 string.gmatch
一起使用的 %d+
模式将提取所有剩余的数字块。