python正则表达式零宽断言

2022-10-31 09:36:31 浏览数 (1)

零宽断言就是一种零宽度的匹配,它匹配的内容不会保存到匹配结果中。表达式的匹配内容只是代表了一个位置而已。比如说,标明某个字符的右边界是怎样的构造。

字符

描述

?=

零宽度正预测先行断言,它断言自身出现位置的后面可以匹配后面跟的表达式

?<=

零宽度正回顾后发断言,它断言自身出现位置的前面可以匹配后面跟的表达式

?!

零宽度负预测先行断言,它断言自身出现位置的后面不可以匹配后面跟的表达式

?<!

零宽度负回顾后发断言,它断言自身出现位置的前面不可以匹配后面跟的表达式

乍一看上面这个表格,脑子都大了。这零宽断言到底是啥?我怎么这么蒙啊?

必须承认的是,零宽断言的确是有点难理解,所以还是得结合代码来进行思考。

代码语言:javascript复制
import re

s = r'eating apple seeing paper watching movie'

m1 = re.findall(r'(bw ?)ing', s)
print(m1)

m2 = re.findall(r'(. ?)(?=ing)', s)
print(m2)

m3 = re.findall(r'(. ?)(?<=ing)', s)
print(m3)

s = 'unite one unethical ethics use unite ultimate'

m4 = re.findall(r'b(?!un)w b', s)
print(m4)

m5 = re.findall(r'(?<! [a-z])d{3,}', 'abc123, 123, 4567')
print(m5)

执行结果

代码语言:javascript复制
['eat', 'see', 'watch']
['eat', 'ing apple see', 'ing paper watch']
['eating', ' apple seeing', ' paper watching']
['one', 'ethics', 'use', 'ultimate']
['123', '123', '4567']

从代码和执行结果来看,再结合思考,就可以更好的理解零宽断言到底是啥东西了。嗯就是那种很微妙的感觉。

0 人点赞