简单负前瞻
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
,这对于此处 q
的 all 是正确的。通常,正前瞻是通过 (?=...)
形成的,而负前瞻只是 (?!...)
.
旁注:行尾不需要 ;
除非您想将所有内容写在一行中,这不被认为是 "Pythonic" 但完全有效:
import re; print(re.findall(r"q(?!u)", "qqq queen quick qeel"))
我明白了:
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
,这对于此处 q
的 all 是正确的。通常,正前瞻是通过 (?=...)
形成的,而负前瞻只是 (?!...)
.旁注:行尾不需要
;
除非您想将所有内容写在一行中,这不被认为是 "Pythonic" 但完全有效:
import re; print(re.findall(r"q(?!u)", "qqq queen quick qeel"))