如何使用Python正则表达式提取URL中的page标识及对应页码
正则提取URL中page标识及页码的解决方案
你原有正则的问题在于将分隔符和页码放在同一个选择分支中,既无法准确分离出1-3位的页码,也不能适配page和页码之间不同类型分隔符的匹配逻辑。
适配所有变体的正则规则
如果需要同时捕获page标识和对应页码,使用如下规则:
(?<=[/?])(page)(?:[-=/])?(\d{1,3})(?=/|$)
规则说明:
(?<=[/?]):正向回顾后断言,限定匹配位置的前一位只能是路径分隔符/或者查询参数起始符?,避免匹配到URL其他位置包含page的无关内容(page):第一捕获组,精准匹配你需要的page标识(?:[-=/])?:非捕获组,匹配page和页码之间可能存在的分隔符(支持-、=、/三种),同时兼容没有分隔符直接跟数字的场景(\d{1,3}):第二捕获组,精准匹配1-3位的有效页码(?=/|$):正向先行断言,限定页码后面只能是结尾或者路径分隔符/,避免误匹配更长数字或其他无关字符
匹配效果验证
该规则可以100%覆盖你给出的所有URL变体,提取结果符合预期:
| 测试URL | 捕获page标识 | 捕获页码 |
|---|---|---|
| fghghdsfs/page4 | page | 4 |
| fghghdsfs/page-4 | page | 4 |
| sfgsfgsfg/page=4 | page | 4 |
| hteheth/page-4/ | page | 4 |
| dhdghgd/page=4/ | page | 4 |
| dghdghdh/page/4/ | page | 4 |
| dghdghdh/page/4 | page | 4 |
| fghghdsfs?page4 | page | 4 |
| dhdghd?page-4 | page | 4 |
| dghdg?page-4/ | page | 4 |
| eyeyt?page=4 | page | 4 |
| etyetyet?page=4/ | page | 4 |
| nvnndgnd?page/4/ | page | 4 |
| dghdghdh/page/4 | page | 4 |
变体需求调整
如果你需要连前面的/或?也一起捕获,直接去掉回顾后断言即可:
([/?])(page)(?:[-=/])?(\d{1,3})(?=/|$)
此时第一捕获组为前缀分隔符,第二组为page标识,第三组为页码。
内容的提问来源于stack exchange,提问作者taga
相关产品推荐
相关产品推荐

