txt = "r/1 /r/2 er/3"
x = re.findall("(?!e)r\/[0-9]", txt)
以上代码匹配r/1、r/2、r/3(即一切)
将其更改为 ?=e 时不匹配任何内容
不是第一个代码应该只匹配 r/1 和 r/2 因为我基本上是在说“匹配模式 r/digit 但前提是它不是以 e"
请您参考如下方法:
(?!e)是一个否定的ahead,如果在当前位置的右侧,它的模式找到匹配项,则匹配失败。所以,(?!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 个以上数字。
