第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反

时间:2022-08-09 12:42:26

一、 引言

在《第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反》中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反。

二、 (?<=…)后视断言(lookbehind assertion)

后视断言又称为正向后视断言、后视断定、后行断言等,与前视断言功能类似,只是前视断言是找匹配串的右边要与前视断言指定的模式匹配,而后视断言是找匹配串的左边要与后视断言指定的模式匹配。

语法:(?<=…),其中…为一个子正则表达式

例子:

要使用后视断言查找Python前有LaoYuan的字符串:

>>> re.search('(?<=LaoYuan)Python','Learning Python with LaoYuan,LaoYuanPython accompanies you to progress')
<re.Match object; span=(36, 42), match='Python'>
>>>

注意:

1、后视断言必须放在真正要匹配模式的左边,因为是在左边查找是否有字符串匹配后视断言要求;

2、后视断言从匹配串反向往左边查找,如上例中先找到Python,再往左逐一匹配看是否有LaoYuan;

3、后视断言的匹配模式中匹配的字符串必须是定长的,不能是可变长的,如不能使用{m,n}、*、+等重复匹配模式。

三、 (?<!…)后视取反(negative lookbehind assertion)

也称反向后视断言、负向后视断言等,后视取反与后视断言的关系与前视取反与前视断言的关系一样,是匹配串向左不能出现… 子正则表达式指定的样式。

语法:(?<!…),其中…为一个子正则表达式

例子:

>>> re.search('(?<!LaoYuan)Python','Learning Python with LaoYuan,LaoYuanPython accompanies you to progress')
<re.Match object; span=(9, 15), match='Python'>

注意:

1、后视取反必须放在真正要匹配模式的左边,因为是在左边查找是否不会出现指定模式的字符串;

2、后视取反的匹配模式中匹配的字符串也必须是定长的,不能是可变长的,如不能使用{m,n}、*、+等重复匹配模式。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!