第11.21节 Python 中正则表达式的其他扩展功能
一、 引言
在《第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 中正则表达式的其他扩展功能的更多相关文章
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
- 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...
- 第11.23节 Python 中re模块的搜索替换功能:sub及subn函数
一. 引言 在<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findall.finditer>重点介绍了几个搜索函数,除了搜索,re模块也 ...
- 第11.22节 Python 中re模块的字符串分割器:split函数
一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...
- 第11.18节 Python 中re模块的匹配对象
匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...
- 第11.24节 Python 中re模块的其他函数
一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...
- 第8.21节 Python中__lt__、__gt__等 “富比较”(“rich comparison”)方法用途探究
一. 富比较方法 Python的基类object提供一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较.他们也是实例方法,定义如下: object.l ...
- 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析
一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...
- 第11.13节 Python正则表达式的转义符”\”功能介绍
为了支持特殊元字符在特定场景下能表示自身而不会被当成元字符进行匹配出来,可以通过字符集或转义符表示方法来表示,字符集表示方法前面在<第11.4节 Python正则表达式搜索字符集匹配功能及元字符 ...
随机推荐
- C# 时间格式处理
C#的常用时间格式意义: 1字符"y"---year,年,yy显示13,yyyy显示2013 2字符"M"---Month,月份,M显示5,MM显示05 3字符 ...
- Table is marked as crashed and should be repaired 解决办法
遇到这个问题几个敲命令轻松搞定 1.首先进入mysql命令台: mysql -u root -p 回车 输入密码 2.查询所有的库 mysql> show databases; 3.进入数据库 ...
- 解决无法访问 Github
可以正常使用Google,但无法打开Github. 查阅了一些资料,发现需要在hosts文件中添加映射. 在hosts文件中加入两行 140.82.113.4 github.com 140.82.11 ...
- 【转】volatile和synchronized的区别
volatile和synchronized的区别 volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取: synchronized则是锁定当前变量,只有当前 ...
- Docker - 解决在容器内删除和主机映射的目录而报错 rm: cannot remove 'webapps': Device or resource busy 的问题
问题背景 docker run -d --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7 使用 ...
- 在 JavaScript 中,我们能为原始类型添加一个属性或方法吗?
原始类型的方法 JavaScript 允许我们像使用对象一样使用原始类型(字符串,数字等).JavaScript 还提供了这样的调用方法.我们很快就会学习它们,但是首先我们将了解它的工作原理,毕竟原始 ...
- 基于gin的golang web开发:集成swagger
在前后端分离的项目维护一份完整且及时更新的api文档会极大的提高我们的工作效率,传统项目中接口文档都是由后端开发手写的,这种文档很难保证及时性,久而久之便失去了参考意义.swagger给我们提供了一种 ...
- 利用代理IP池(proxy pool)搭建免费ip代理和api
先看这里!!!---->转载:Python爬虫代理IP池(proxy pool) WIIN10安装中遇到的问题: 一.先安装Microsoft Visual C++ Compiler for P ...
- jq判断input 复选框有没有选
选中了返回true ,没选中返回false$("input[type='checkbox']").is(':checked'):
- 新鲜出炉!面试90%会被问到的Java多线程面试题,史上最全系列!
前言 最近很多粉丝朋友私聊我说能不能给整理出一份多线程面试题出来,说自己在最近的面试中老是被问到这一块的问题被问的很烦躁,前一段时间比较忙没时间回私信,前两天看到私信我也是赶紧花了两天给大家整理出这一 ...