简单负前瞻

Simple Negative Lookahead

我明白了:

import re; 
print re.findall(r"q(?=u)", "qqq queen quick qeel")
> ['q', 'q'] # for queen and quick

但我不明白:

import re; 
print re.findall(r"q(?!=u)", "qqq queen quick qeel")
> ['q', 'q', 'q', 'q', 'q', 'q'] # every q matches

我预计只有 4 个 qs 匹配,因为否定前瞻应该看到在单词 qeel 中,例如,q 之后的字母是 not你.

什么给了?

import re 
print(re.findall(r"q(?!u)", "qqq queen quick qeel"))
#                  ---^---
# ['q', 'q', 'q', 'q']


没有 =,即。否则,您不希望前面有 =u,这对于此处 qall 是正确的。通常,正前瞻是通过 (?=...) 形成的,而负前瞻只是 (?!...).

旁注:行尾不需要 ; 除非您想将所有内容写在一行中,这不被认为是 "Pythonic" 但完全有效:

import re; print(re.findall(r"q(?!u)", "qqq queen quick qeel"))