txt = "r/1 /r/2 er/3"
x = re.findall("(?!e)r\/[0-9]", txt)
上面的代码匹配r/1
,r/2
,r/3
(即所有内容)
将其更改为?=e
时不匹配
不是第一个代码应该只匹配r/1 and r/2
,因为我基本上是说“匹配模式r/digit
,但前提是它前面没有e
”
答案 0 :(得分:2)
如果(?!e)
是否定型外观 ,如果当前位置右侧的图案立即找到匹配项,则匹配失败。因此,(?!e)r
总是匹配,因为r
不是e
,并且(?!e)r\/[0-9]
= r\/[0-9]
(即前瞻是多余的,因为它不会影响匹配过程)
您想要一个negative lookbehind,(?<!e)
:
(?<!e)r/[0-9]+
请参见regex demo。我还建议量化[0-9]
模式以匹配1个或多个数字。
详细信息
(?<!e)
-向后隐藏,可确保当前位置的左侧没有e
r/
-一个r/
子字符串[0-9]+
-1个以上的数字。