第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正则表达式搜索字符集匹配功能及元字符 ...
随机推荐
- python代码实现抢票助手
一. 代码使用Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互. 二. 安装好Python 3或2都可以 ...
- ubuntu下创建http服务器
使用ubuntu搭建一个简单的http服务器安装apache21.sudo apt-get update2.sudo apt-get install apache2 安装成功后,再/etc/apach ...
- php正则匹配整数
<?php if(!preg_match('/^([1-9][0-9]*){1,10}$/',$buy_sku)) { $error['content'] = '请检查库存格式'; echo j ...
- 3 jinja2模板
video17 jinja2过滤器 过滤器通过管道符号进行使用.如{{ name | length }}将返回name的长度,过滤器相当于是一个函数. 1 def hello_world(): 2 i ...
- Docker 实战(4)- 结合 Jenkins + Gitlab 完成自动化测试的持续集成实战
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html Jenkins 关联 Gitla ...
- HarmonyOS Java UI之DirectionalLayout布局
在之前的章节中我使用的是Java 代码构建UI界面,从本节开始,将使用XML构建UI界面. 使用XML构建UI(默认你已经会在项目中创建XML布局文件)界面相对Java代码构建的好处是:结构清晰,代码 ...
- IO复用之poll
主要用一个例程来讲解poll,包含客户端和服务器端. poll函数没有FD_SETSIZE的限制 int poll(struct pollfd * fdarray, unsigned long nfd ...
- 2018.1.15复习_ css+js
[1]几个常见的css标签:--------------------------------------------------background-color; 设置背景颜色background-p ...
- 美团 Java 面试 154 道题分享!
Java集合22题 ArrayList 和 Vector 的区别. 说说 ArrayList,Vector, LinkedList 的存储性能和特性. 快速失败 (fail-fast) 和安全失败 ( ...
- 数据结构实训——哈夫曼(Huffman)编/译码器
题目4.哈夫曼(Huffman)编/译码器(限1人完成) [问题描述] 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本.但是,这要求在发送端通过一个编码系统对待传数据预先 ...