python正则表达式的零宽断言

本文详细介绍了Python中正则表达式的零宽断言,包括正向和反向的预测先行和回顾后发四种类型,并强调了Python的re模块仅支持定长的后发断言。此外,还提到了利用分组来实现零宽断言功能的方法。

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

零宽断言

零宽断言一共分为正向和反向两类,每类又分为预测先行和回顾后发两种:

  ####零宽度正预测先行断言
  简称正向先行断言,语法是(?=exp),它断言此位置的后面能匹配表达式exp。

  ####零宽度正回顾后发断言
  简称正向后发断言,语法是(?<=exp),它断言此位置的前面能匹配表达式exp。

  ####零宽度负预测先行断言
  简称反向先行断言,语法是(?!exp),它断言此位置的后面不能匹配表达式exp。

  ####零宽度负回顾后发断言
  简称反向后发断言,语法是(?

(?=exp)     匹配exp后面的位置
(?<=exp)    匹配exp前面的位置
(?!exp)     匹配后面跟的不是exp的位置
(?<!exp)    匹配前面不是exp的位置

零宽断言定长宽度

当使用零宽断言出现以下错误信息:“sre_constants.error: look-behind requires fixed-width pattern”,我们可以得出python的re模块并不支持变长的后发断言,只支持定长的后发断言。

分组

可以使用分组匹配,完成零宽断言的功能,先将断言前后位置的字符全部匹配到,再取其中特定的元素即可。

import re
pattern = re.compile(r'<([a-zA-Z]+)>(.*)</\1>')#两个圆括号中的内容表示分组([a-zA-Z]+)、(.*)
s = '<html>hello world</html>'
ret = re.search(pattern, s)

print('re.groups():', ret.groups())#以元组的形式返回所有匹配的分组元素
print('re.group():', ret.group())#不考虑分组,返回整个匹配到的字符
print('re.group(0):', ret.group(0))#不考虑分组,返回整个匹配到的字符
print('re.group(1):', ret.group(1))#返回分组中第1个元素,计数从1开始
print('re.group(2):', ret.group(2))#返回分组中第2个元素,计数从2开始

结果如下 :

re.groups(): ('html', 'hello world')
re.group(): <html>hello world</html>
re.group(0): <html>hello world</html>
re.group(1): html
re.group(2): hello world

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值