所以我想匹配issues/
或settings/general/
,但是在第二种情况下,/general
不应该包含在匹配项中,因此我尝试在第二种情况下使用正向超前似乎没有用,这就是我想出的。
^(issues|settings(?=/general))/$
答案 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'>