零宽断言 python_Python 正则表达式零宽正负向断言的用法及示例代码

1、零宽断言表达式

(?=exp):零宽度正先行断言。仅当子表达式 exp 在此位置的右侧匹配时才继续匹配。例如,/w+(?=/d)与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。

(?!exp):零宽度负先行断言。仅当子表达式 exp 不在此位置的右侧匹配时才继续匹配。例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。

(?<=exp):零宽度正后发断言。仅当子表达式 exp 在此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。

(?

2、使用示例代码

1)(?=exp)s = "I'm singing while you're dancing."

p = re.compile(r'\b\w+(?=ing\b)')

print '【Output】'

print re.findall(p,s)【Output】

['sing', 'danc']

2) (?<=exp)s = "doing done do todo"

p = re.compile(r'(?<=\bdo)\w+\b')

print '【Output】'

print re.findall(p,s)【Output】

['ing', 'ne']

3) (?!exp)s = 'done run going'

p = re.compile(r'\b\w{2}(?!ing\b)')

print '【Output】'

print re.findall(p,s)【Output】

['do', 'ru']

注意:负向断言不支持匹配不定长的表达式

4)(?

p = re.compile(r'(?

print '【Output】'

print re.findall(p,s)【Output】

['un', 'ng']

注意:负向断言不支持匹配不定长的表达式

3、使用零宽断言判断包含某个字符串且不包含某字符串

判断字符串后边包含"编程"或"学习"字符串,前边不能包含cjavapy字符串,使用零宽断言示例如下:#coding=utf-8

import re

pattern = '^((?

w = '今年线上cjavapy开始网上编程知识收集'

#w = '今年线上开始网上编程知识收集'

result = re.search(pattern, w)

print(result)

4、使用零宽断言表达式与正则表达式.*组合使用写法

上述示例中代码,可能错误写成如下:pattern = '^.*(?

当.*和零宽断言表达式组合时,应该注意与任意字符.的组合,如下:pattern = '^((?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值