匹配打印页码范围的Python正则如何限制/的前置条件?
解决方案
你原来的写法把斜杠校验单独拆出,加上主流正则引擎不支持不定长后行断言,所以没法在原有后行断言的位置直接补规则实现需求,调整整体正则结构即可:
^([1-9]\d*)(?:([-:])([1-9]\d*)(?:/([1-9]\d*))?)?$
规则说明
- 开头
([1-9]\d*)匹配起始页码,禁止0开头 - 后半段可选分组
(?:([-:])([1-9]\d*)(?:/([1-9]\d*))?)?$是范围/冒号规则的可选部分:- 先匹配分隔符
-或者: - 再匹配范围结束值/冒号后跟随的数字
- 只有上述两个规则都命中时,才允许出现
/加步长数字
- 先匹配分隔符
- 完全覆盖所有合法场景:
6、1-6、6:4、10-20/3、2048-4096/100、15:10/3,同时拦截5/3这类非法格式
原有写法问题说明
你之前尝试的后行断言写法失败是因为大部分正则引擎的后行断言只支持固定/有限长度匹配,[:-]\d*中\d*是不定长的,不符合引擎要求,所以不要硬抠原有后行断言的位置修改,调整整体结构是最简单的方案。
内容的提问来源于stack exchange,提问作者newbiecoder11
相关产品推荐
相关产品推荐

