1.环视的含义
(?=...) | 肯定顺序环视,子表达式能匹配右侧的文本 |
---|---|
(?!...) | 否定顺序环视,子表达式不能匹配右侧的文本 |
(?<=...) | 肯定逆序环视,子表达式能匹配左侧的文本 |
(?<!...) | 否定逆序环视,子表达式不能匹配左侧的文本 |
栗子:
import re
print(re.findall("(?<=B)AAA","BAAA"))
print(re.findall("(?<!B)AAA","CAAA"))#这里使用(?<!B)、(?<!=B)均可
print(re.findall("AAA(?=B)","AAAB"))
print(re.findall("AAA(?!B)","AAAC"))#这里使用(?!B)、(?!=B)均可
输出结果是:
其含义是:
(?<=B)AAA
匹配前面是B的数据,即BAAA匹配,而CAAA不匹配 (?<!B)AAA
匹配前面不是B的数据,即CAAA匹配,而BAAA不匹配 AAA(?=B)
匹配后面是B的数据,即AAAB匹配,而AAAC不匹配 AAA(?!B)
匹配后面不是B的数据,即AAAC能匹配,而AAAB不能匹配
2.环视不占有字符
环视匹配的最终结果就是一个位置,匹配到的内容不保存到最终的匹配结果。这就好像要找某一单位,它位于人民大街和自由大路交叉口,人民大街东侧,自由大路南侧。我们根据这些线索确定这个单位,结果并不包含这些线索。环视的作用相当于对所在位置加了一个附加条件,只有满足这个条件,环视子表达式才能匹配成功。
实际上很复杂,在栗子中逐渐加深理解吧。
参考文献: