如何用Python正则匹配特定URL模式(仅排除p1.g.com、p2.g.com)
正则匹配解决方案
核心需求
匹配p#.g.com格式URL,#为纯数字组合,仅排除p1.g.com、p2.g.com两种场景,其余所有长度的数字组合都要命中,包括首位为1/2的多位数(如p11.g.com、p23.g.com)。
原有方案问题
r"(?P<url>p([^1,2])\.g\.com)":仅支持匹配单个非1/2字符,无法覆盖两位数及以上的数字场景r"(?P<url>p([^1,2])\d+\.g\.com)":强制要求数字首位不能为1/2,误排除了所有首位为1/2的多位数
正确正则表达式
子串匹配版本
r"(?P<url>p(?!1(?!\d)|2(?!\d))\d+\.g\.com)"
全匹配版本(仅当整个字符串完全符合格式时命中)
r"^(?P<url>p(?!1(?!\d)|2(?!\d))\d+\.g\.com)$"
逻辑说明
- 核心通过负向前瞻断言
(?!1(?!\d)|2(?!\d))实现精准排除:仅过滤「p后紧跟单独的1且无后续数字」、「p后紧跟单独的2且无后续数字」的场景,不会限制多位数的首位取值 \d+匹配1位及以上任意纯数字,支持无上限的数字长度- 保留了
url命名捕获组,可直接提取匹配到的完整URL
验证结果
- 命中示例:
p3.g.com、p11.g.com、p29.g.com、p9999.g.com - 排除示例:
p1.g.com、p2.g.com
内容的提问来源于stack exchange,提问作者Bruce Banner
相关产品推荐
相关产品推荐

