【发布时间】:2021-12-03 11:43:02
【问题描述】:
我有这个匹配任何打印页面规范的正则表达式(例如: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
在上面的表达式中我尝试过的空肯定的lookbehind:
(?:(?<=[:|-]\d)([/]?))
但这会导致我所有的测试都失败,导致没有匹配。我也尝试过(?:(?<=[:|-]\d*)([/]?)),但后视中不允许使用量词。
我可以在空的正向后面放什么来使它检查 : 或 - 和数字是否在 /强>?
【问题讨论】:
-
(?<=[-:])?的目的是什么?如果你需要一些可选的东西,只需删除这个lookbehind。 -
但是在lookbehind中不允许使用量词。内置模块
re的限制是lookbehind必须是固定宽度,如果你需要可变长度lookbehind并且允许使用外部模块,看看regex -
我也刚刚意识到这个问题。我把它放在那里只匹配一个数字(6、3、1000),但它产生了另一个问题:5:不应该匹配。
标签: python regex regex-lookarounds