我希望有一个匹配的regexp模式,它匹配以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,})$

但它并不能正常工作.不知何故,仍然符合禁忌的情况.

推荐答案

TL;DR使用^(?!APT|BOX).*?([0-9]{4,})$


您的正则表达式(?<!(APT |BOX ))([0-9]{4,})$不正确地匹配:

  • 2345BOX 12345,因为它前面没有APT BOX .相反,它的前面是BOX 1
  • BOX40444044上,因为它前面没有APT BOX .第BOX话之前
  • 2345章因为同样的原因

您要查找的正则表达式是^(?!APT|BOX).*?([0-9]{4,})$,其分解方式如下:

  • ^(?!APT|BOX)-字符串的开头不能跟APTBOX
  • .*?-字符串中间的一堆垃圾,尽可能少的字符(即测试用例中的HITME )
  • ([0-9]{4,})$-字符串末尾的匹配数字

Python相关问答推荐

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

难以在Manim中正确定位对象

如何在Windows上用Python提取名称中带有逗号的文件?

运行终端命令时出现问题:pip start anonymous"

在np数组上实现无重叠的二维滑动窗口

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

如何在Python中找到线性依赖mod 2

Django RawSQL注释字段

如何在FastAPI中为我上传的json文件提供索引ID?

Flash只从html表单中获取一个值

matplotlib图中的复杂箭头形状

在代码执行后关闭ChromeDriver窗口

使用类型提示进行类型转换

为用户输入的整数查找根/幂整数对的Python练习

按条件添加小计列

如何为需要初始化的具体类实现依赖反转和接口分离?

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

EST格式的Azure数据库笔记本中的当前时间戳

使用元组扩展字典的产品挑战

IpyWidget Select 框未打开