首页 > 解决方案 > 如何在 Python 正则表达式中匹配特定的 URL 模式

问题描述

我无法匹配这种格式的模式:p#.g.com其中 # 不是 1 或 2。例如,如果模式是p1.g.com,我不需要匹配。如果是的话p2.g.com,我不需要匹配。

但如果它是任何其他数字,例如p3.g.comor p29.g.com,那么我需要匹配。

我当前的模式是r"(?P<url>p([^1,2])\.g\.com)",但如果模式是 p##.g.com 则失败,基本上是任何两位数都失败。# 没有上限,因此它可以是 3 或 999 或介于两者之间的任何值。

我也尝试过r"(?P<url>p([^1,2])\d+\.g\.com)",但它不匹配任何以 1 或 2 开头的数字。例如 11 或 23 不匹配,我确实想要匹配。

标签: pythonregex

解决方案


试试这个正则表达式:

p(?:[03-9]|\d{2,})\.g\.com

演示

解释:

  • 匹配字符p
  • 非捕获组的开始
    • 匹配以下之一:
      • 数字 0 或 3-9
      • 任何两位数,例如 10 或更高
  • 匹配字符 .g.com

推荐阅读