正则表达式负向回顾

问题描述 投票:0回答:1

我想要一个匹配的正则表达式模式,它匹配所有以 4 位或更多数字结尾的地址,但不在

'APT'
'BOX'
'APT '
'BOX '
之后。 所以它应该符合这些情况

HITME 1234
HITME 12345
HITME1234

但不包括以下情况

BOX 1234
BOX 12345
BOX4044
APT 1234
APT 12345
NONHIT123
NONHIT 123

我做了这个

(?<!(APT |BOX ))([0-9]{4,})$

但它不能正常工作。不知何故仍然符合不不情况。

python regex regex-lookarounds
1个回答
0
投票

您的正则表达式

(?<!(APT |BOX ))([0-9]{4,})$
不正确匹配:

  • BOX 12345
    位于
    2345
    上,因为它前面没有
    APT 
    BOX 
    。相反,它前面有
    BOX 1
  • BOX4044
    位于
    4044
    上,因为它前面没有
    APT 
    BOX 
    。相反,它前面有
    BOX
  • 出于类似的原因,
  • APT 12345
    2345

您正在寻找的正则表达式是

^(?!APT|BOX).*?([0-9]{4,})$
,它的分解如下:

  • ^(?!APT|BOX)
    字符串开头后面不能跟
    APT
    BOX
  • .*?
    字符串中间有一堆垃圾,尽可能少的字符使模式正常工作(即测试用例中的
    HITME 
  • ([0-9]{4,})
    字符串末尾的匹配数字
© www.soinside.com 2019 - 2024. All rights reserved.