正则表达式中的“环视”(lookaround)学习笔记

本文介绍了正则表达式中的环视概念,包括向前环视(匹配前面是或不是特定字符)和向后环视(匹配后面是或不是特定字符)。环视不占用匹配的字符,它为匹配位置添加了额外的条件,帮助更精确地定位匹配内容。通过实例和参考文献,读者可以深入理解这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.环视的含义

环视(lookaround)的含义
(?=...)肯定顺序环视,子表达式能匹配右侧的文本
(?!...)否定顺序环视,子表达式不能匹配右侧的文本
(?<=...)肯定逆序环视,子表达式能匹配左侧的文本
(?<!...)否定逆序环视,子表达式不能匹配左侧的文本

栗子:

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.环视不占有字符

环视匹配的最终结果就是一个位置,匹配到的内容不保存到最终的匹配结果。这就好像要找某一单位,它位于人民大街和自由大路交叉口,人民大街东侧,自由大路南侧。我们根据这些线索确定这个单位,结果并不包含这些线索。环视的作用相当于对所在位置加了一个附加条件,只有满足这个条件,环视子表达式才能匹配成功。

实际上很复杂,在栗子中逐渐加深理解吧。

参考文献:

1.深入理解正则表达式的环视

2.巧解正则表达式环视

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值