一、 引言

在《第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


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

第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反的更多相关文章

  1. 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反

    一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...

  2. 第11.21节 Python 中正则表达式的其他扩展功能

    一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...

  3. 第11.23节 Python 中re模块的搜索替换功能:sub及subn函数

    一. 引言 在<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findall.finditer>重点介绍了几个搜索函数,除了搜索,re模块也 ...

  4. 第11.22节 Python 中re模块的字符串分割器:split函数

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  5. 第11.18节 Python 中re模块的匹配对象

    匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...

  6. 第8.20节 Python中限制动态定义实例属性的白名单:__slots__

    一. 引言 按照<第7.10节 Python类中的实例变量定义与使用>.<第7.14节Python类中的实例方法解析>中的介绍,当定义了一个类,并且创建了该类的实例后,可以给该 ...

  7. 第11.24节 Python 中re模块的其他函数

    一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...

  8. 第11.13节 Python正则表达式的转义符”\”功能介绍

    为了支持特殊元字符在特定场景下能表示自身而不会被当成元字符进行匹配出来,可以通过字符集或转义符表示方法来表示,字符集表示方法前面在<第11.4节 Python正则表达式搜索字符集匹配功能及元字符 ...

  9. 第11.25节 Python正则表达式编译re.compile及正则对象使用

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

随机推荐

  1. python数据分析02语法基础

    在我来看,没有必要为了数据分析而去精通Python.我鼓励你使用IPython shell和Jupyter试验示例代码,并学习不同类型.函数和方法的文档.虽然我已尽力让本书内容循序渐进,但读者偶尔仍会 ...

  2. kubernetes-1.18.2集群安装-02

    一.基础配置 修改主机名 # 在 172.17.32.23 上:hostnamectl set-hostname k8s-master01bash​# 在 172.17.32.38 上:hostnam ...

  3. [MIT6.006] 23. Computational Complexity 计算复杂度

    这节课主要讲的计算复杂度,一般有三种表达不同程度的计算复杂度,如下图所示: P:多项式时间: EXP:指数时间: R:有限时间内. 上图还给了一些问题的计算复杂度的对应结果,关于一些细节例如NP, N ...

  4. 对“线上问题 不能gdb调试怎么处理??“”的思考

    Q1:线上问题的process 都为release版本!不带调试信息怎么查?(目前有时需要查线上问题, 不得不解决这个问题) 之前查问题都是编译环境编译一个带有debug信息的版本进行替换来调试,但是 ...

  5. waf 引擎 云原生平台tproxy 实现调研

    了解了基本 云原生架构,不清楚的查看之前的文章:https://www.cnblogs.com/codestack/p/13914134.html 现在来看看云原生平台tproxy waf引擎串联实现 ...

  6. read/write系统调用

    /*拷贝文件内容实例read系统调用.write系统调用ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, cons ...

  7. mysql三层体系

    Mysql:是单进程多线程数据库. MySQL分层: mysql分三层:网络连接层, sql层, 存储引擎层,而网络连接层与sql层合称server层,故mysql又分server层合储存引擎层.第一 ...

  8. 如何替换Ceph的Journal

    很多人会提出这样的问题: 能不能够将 Ceph journal 分区从一个磁盘替换到另一个磁盘? 怎样替换 Ceph 的 journal 分区? 有两种方法来修改Ceph的journal: 创建一个j ...

  9. ASP.NET Core管道详解[2]: HttpContext本质论

    ASP.NET Core请求处理管道由一个服务器和一组有序排列的中间件构成,所有中间件针对请求的处理都在通过HttpContext对象表示的上下文中进行.由于应用程序总是利用服务器来完成对请求的接收和 ...

  10. 通过phpmyadmin拿下webshell

    废话: 1.听说网上卖手机的网站很多是诈骗的,搜到一个499元货到付款的手机网站.有点像诈骗,但倒觉得他是在收集用户信息 2.把网站扔到御剑,搜到phpmyadmin的后台,试试下账号密码居然都是默认 ...