Python 匹配打印页面及其范围的正则表达式

Python Regular expression to match printing pages and their range

我有这个匹配任何打印页面规范的正则表达式(例如:6、1-6、6:4、10-20/3

^([1-9]\d*)((?<=\d)[-]|[:]?)((?<=-|:)?[1-9]\d*)?(?:(?<=)([/]?))([1-9]\d*)?$

我有它,所以它当前匹配:例如:2048-4096/100,15:10/3

但是,我的正则表达式也匹配 5/3/ 应该只跟在冒号或破折号和一些数字之后,比如2048-4096/100

在上面表达式的空正后视中,我已经尝试过: (?:(?<=[:|-]\d)([/]?)) 但这会导致我所有的测试都失败,导致没有匹配项。我也试过 (?:(?<=[:|-]\d*)([/]?)) 但在回顾中不允许使用量词。

我可以在空的正后视中放入什么来制作它,以便它检查 :- 和数字是在 /?

之前

您可以使用

^([1-9]\d*)(?:([-:])([1-9]\d*)(?:(/)([1-9]\d*))?)?$

regex demo详情:

  • ^ - 字符串开头
  • ([1-9]\d*) - 第 1 组:一个非零数字,然后是零个或多个数字
  • (?:([-:])([1-9]\d*)(?:(/)([1-9]\d*))?)? - 可选出现
    • ([-:]) - 第 2 组:-:
    • ([1-9]\d*) - 第 3 组:一个非零数字,然后是零个或多个数字
    • (?:(/)([1-9]\d*))? - 可选出现
      • (/) - 第 4 组:/
      • ([1-9]\d*) - 第 5 组:一个非零数字,然后是零个或多个数字
  • $ - 字符串结尾。

我保持所有组不变,但至少 (/) 组是多余的,因为模式固定为 /