反向查找反向正则表达式
reverse lookup inverted regex
我正在处理类似这样的字符串:
ABCD_EFGHI-78-32#1-R77.2_301009_1_AB3_CD
分隔符是:_
我需要一个正则表达式,如果第二部分 [EFGHI-98-32#1-R77.2] 在该块中的任何地方包含不区分大小写的“TesT”,但它会匹配任何其他情况。
所以我是这样开始的:
^[A-Z]{4,5}_(?i)(?<=_)(.*)(?=TEST)(?-i).+?(?=_)_\d{6}_\d_.{2}\d_.{2}
但我不知道如何将 ?=TEST 反转为 ?!=TEST,我注意到分组和匹配也存在差异。
如果第二个块包含定界符之间的单词测试的任何变体,我将不胜感激在正则表达式的制定方面提供一些帮助,以便整个字符串匹配。
例如。这个有效,但前提是第二个块以单词测试开头:
^[A-Z]{4,5}_((?i)(?!test)(?-i).+?(?=_))_\d{6}_\d_.{2}\d_.{2}$
谢谢!
你必须在每个没有出现 test
的字符处进行测试。所以你的第二组基本上应该是
(?:(?!test)[^_])+
将其合并到您的正则表达式中,并添加不区分大小写的标志,
^[A-Z]{4,5}_(?:(?!(?i)test)[^_])+_\d{6}_\d_[^_]{2}\d_[^_]{2}
(你可能不想要 .{2}
,因为它会接受 __
,例如——所以明确限制字符集是有道理的)
这里是您的模式的快速修复:
^[A-Z]{4,5}_((?![^_]*(?i:test))[^_]*)_\d{6}_\d_.{2}\d_.{2}$
参见regex demo。我只替换了第 2 组模式:
(?![^_]*(?i:test))
- 如果 _
后跟不区分大小写的 test
字符串(注意内联修饰符组是用于使该模式更短一些,并且也更便携)
[^_]*
- 除下划线外的任何零个或多个字符。
我正在处理类似这样的字符串:
ABCD_EFGHI-78-32#1-R77.2_301009_1_AB3_CD
分隔符是:_
我需要一个正则表达式,如果第二部分 [EFGHI-98-32#1-R77.2] 在该块中的任何地方包含不区分大小写的“TesT”,但它会匹配任何其他情况。
所以我是这样开始的:
^[A-Z]{4,5}_(?i)(?<=_)(.*)(?=TEST)(?-i).+?(?=_)_\d{6}_\d_.{2}\d_.{2}
但我不知道如何将 ?=TEST 反转为 ?!=TEST,我注意到分组和匹配也存在差异。
如果第二个块包含定界符之间的单词测试的任何变体,我将不胜感激在正则表达式的制定方面提供一些帮助,以便整个字符串匹配。
例如。这个有效,但前提是第二个块以单词测试开头:
^[A-Z]{4,5}_((?i)(?!test)(?-i).+?(?=_))_\d{6}_\d_.{2}\d_.{2}$
谢谢!
你必须在每个没有出现 test
的字符处进行测试。所以你的第二组基本上应该是
(?:(?!test)[^_])+
将其合并到您的正则表达式中,并添加不区分大小写的标志,
^[A-Z]{4,5}_(?:(?!(?i)test)[^_])+_\d{6}_\d_[^_]{2}\d_[^_]{2}
(你可能不想要 .{2}
,因为它会接受 __
,例如——所以明确限制字符集是有道理的)
这里是您的模式的快速修复:
^[A-Z]{4,5}_((?![^_]*(?i:test))[^_]*)_\d{6}_\d_.{2}\d_.{2}$
参见regex demo。我只替换了第 2 组模式:
(?![^_]*(?i:test))
- 如果_
后跟不区分大小写的test
字符串(注意内联修饰符组是用于使该模式更短一些,并且也更便携)[^_]*
- 除下划线外的任何零个或多个字符。