一、 引言

在《第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用》中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中正则表达式的扩展功能非常多,所有扩展功能都是在左括号后面跟问号“?”来表示,具体扩展功能是要看问号后面的字符来确认,如“P”表示组名相关扩展。

下面老猿将未介绍的主要正则表达式扩展功能在本节进行介绍,下面介绍的扩展功能中的“…”都表示一个合法的子模式正则表达式。

二、 (?#…) 注释

表示右括号前面的内容都是注释,正则表达式处理时将忽略这部分内容。

三、 (?aiLmsux) 内联标记

内联标记与《第11.2节 Python 正则表达式支持函数概览》介绍的参数flags搜索标记的作用是类似的。

内联标记中的“aiLmsux”为可以使用的标记字符集合,匹配时可以选择填入其中的一个或多个,这个搜索标记本身不匹配任何搜索串的内容,只是为了搜索控制的。这些字符与搜索标记的对应关系如下:

a: re.A ,表示只匹配ASCII字符

i: re.I ,表示匹配忽略大小写;

L: re.L ,表示语言依赖;

m: re.M ,多行模式;

s: re.S、re.DOTALL,点匹配全部字符;

u: re.U ,Unicode匹配,由于Python3都是Unicode匹配,因此该标记基本没有什么用;

x: re.X ,冗长模式,允许编写更友好的正则表达式。

这些标记可以组合使用,包含这些标记的正则表达式,可以免去了在 调用相关函数时传递 flag 参数。注意:标记应该在整个正则表达式字符串首位表示,是对整个正则表达式生效。

四、 (?:…)

正则括号组匹配模式的非捕获版本, 匹配在括号内的任何正则表达式,但该分组所匹配的子字符串 不能 在执行匹配后被获取或是之后在模式中被引用。

五、 (?(id/name)yes-pattern|no-pattern)条件性匹配

如果给定的 组序号 或 组名存在,将会去匹配 yes-pattern对应子正则表达式 ,否则就去匹配 no-pattern对应正则表达式,no-pattern 可选,也可以被忽略。

案例:

>>> re.search(r'(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)','<LaoYuanPython@csdn.com>')
<re.Match object; span=(0, 24), match='<LaoYuanPython@csdn.com>'>
>>> re.search(r'(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)','(LaoYuanPython@csdn.com')
<re.Match object; span=(1, 23), match='LaoYuanPython@csdn.com'>
>>> re.search(r'(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)','(LaoYuanPython@csdn.com)')
>>> re.search(r'(<)?(\w+@\w+(?:\.\w+)+)(?(1)>)','(LaoYuanPython@csdn.com)')
<re.Match object; span=(1, 23), match='LaoYuanPython@csdn.com'>

上述正则表达式正常匹配的含义是:当组号1(匹配’<’)匹配成功时,要求搜索串以”>”结束,当组号1未匹配时,要求域名后面不能有任何其他字符。

老猿Python,跟老猿学Python!

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


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

第11.21节 Python 中正则表达式的其他扩展功能的更多相关文章

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

    一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...

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

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

  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. 第11.24节 Python 中re模块的其他函数

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

  7. 第8.21节 Python中__lt__、__gt__等 “富比较”(“rich comparison”)方法用途探究

    一. 富比较方法 Python的基类object提供一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较.他们也是实例方法,定义如下: object.l ...

  8. 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析

    一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...

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

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

随机推荐

  1. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  2. Mybatis执行SQL的流程

    前篇:Mybatis初始化过程 SqlSession : SqlSession是一个接口,它有两个实现类:DefaultSqlSession (默认)和 SqlSessionManager (弃用,不 ...

  3. tcp syn-synack-ack 服务端发送syn-ack

    tcp_v4_send_synack()用于发送SYNACK段,在tcp_v4_conn_request()中被调用. 首先调用tcp_make_synack()构造SYNACK段,主要是构造TCP报 ...

  4. Fiddler的一系列学习瞎记(没有章法的笔记)

    前言: 工作上要接触很多移动设备,进行测试,所以抓包软件不能少,但是看你习惯,你要是说我喜欢charles,也可以,毕竟我也买不起苹果电脑,就不拿charles装在windows上了,还是乖乖的Fid ...

  5. HTTP介绍(一)

    超文本传输协议(HTTP)是一种用于分布式,协作式超媒体信息系统的应用程序层协议.HTTP是万维网(World Wide Web)数据通信的基础,超文本文档包括指向用户可以轻松访问的其他资源的超链接, ...

  6. 【Kubernetes学习笔记】-服务访问之 IP & Port & Endpoint 辨析

    目录 不同类型的IP Pod IP Cluster IP 不同类型的Port port nodePort TargetPort containerPort hostPort Endpoint Endp ...

  7. mybatis 解决属性名和字段名不一致

    1. 数据库中表的设计 2. 实体类 3.mapper映射文件 4. 问题:密码没有获取到 原因:mybatis会根据查询的列名去进行设值 5. 解决列名和属性名不一致的方法 5.1 为列名指定别名, ...

  8. python-验证码图片识别

    import tesserocr from PIL import Image #新建Image对象 image = Image.open('code.png') #调用tesserocr的image_ ...

  9. springboot使用swagger2生成开发文档

    一.引入jar包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox- ...

  10. 应届生应聘阿里,腾讯,美团90%会被问到的Netty面试题!史上最全系列!

    1.BIO.NIO 和 AIO 的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大.伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源 ...