为什么正向前进最终不能与/ $一起使用

时间:2019-12-12 12:21:58

标签: python regex regex-lookarounds

所以我想匹配issues/settings/general/,但是在第二种情况下,/general不应该包含在匹配项中,因此我尝试在第二种情况下使用正向超前似乎没有用,这就是我想出的。

^(issues|settings(?=/general))/$

1 个答案:

答案 0 :(得分:0)

这是因为未消耗字符串的/general部分。

在检查settings后面是否正确插入/general之后,光标仍位于settings的末尾,因此匹配将从该点开始继续。 因此斜杠是正确匹配的,而不是行尾。

如Wiktor所建议,如果要提取字符串的一部分,最好使用组。 这是一个命题:

^(issues|settings)/general/$    

尝试一下:

>>> result = re.match("^(issues|settings)/general/$", "issues/general/")
>>> result
<re.Match object; span=(0, 15), match='issues/general/'>
>>> result.group(1)
'issues'

但是,如果您确实要避免分组,则还可以在前行中包含/$,因此正则表达式将变为^(issues|settings(?=/general/$))

>>> re.match("^(issues|settings(?=/general/$))", "issues/general/")
<re.Match object; span=(0, 6), match='issues'>