一、 引言
在《第11.2节 Python 正则表达式支持函数概览》介绍了re模块的主要函数,在《第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer》重点介绍了几个搜索函数。这些介绍的搜索函数都是直接使用正则表达式去匹配搜索文本,实际上re模块还支持将正则表达式先编译再搜索匹配,这种先编译后搜索在同一个正则表达式多次去执行匹配时可以提高匹配执行效率。

二、 re.compile函数

  1. 语法:compile(pattern, flags=0)
  2. 语法释义:
    pattern是要匹配的正则表达式,flags是在《第11.2节 Python 正则表达式支持函数概览》介绍的搜索标记。
  3. 返回结果:
    返回结果是一个类型为re.Pattern的对象,该对象称为 “正则表达式对象”或“正则对象”。该对象可以直接使用自己的方法search、match等进行搜索和匹配。

三、 正则对象Pattern的属性

  1. Pattern.flags:正则匹配标记。这是可以传递给 compile() 的参数,任何 (?…) 内联标记,隐性标记比如 UNICODE 的结合。不过这里的值是一个数字,而不是使用标记的常量,数字与匹配标记常量对应关系请参考《第11.2节 Python 正则表达式支持函数概览》;
  2. Pattern.groups:捕获组合的数量;
  3. Pattern.groupindex:在命名组内记录组名和组序号的映射关系。如果没有命名组,那字典就是空的。
  4. Pattern.pattern:编译对象的对应的正则表达式。

四、 正则对象的方法

  1. Pattern.search(string[, pos[, endpos]])
    这个方法与re.search函数功能类似,扫描整个 string 寻找第一个匹配位置, 并返回一个相应匹配对象。如果没有匹配,就返回 None。不过比re.search函数多了两个可选参数,可选的第二个参数 pos 给出了字符串中开始搜索的位置索引,默认为 0,如果大于0,对于元字符 ‘^’ 和特殊序列\A样式字符匹配字符串真正的开头,或换行符后面的第一个字符,但不会匹配索引规定开始的位置。
    可选参数 endpos 限定了字符串搜索的结束;当endpos比搜索文本长度小的时候,字符串末尾的匹配如’$’会匹配到endpos对应位置,也就是实际搜索文本变成了原搜索文本从开始到endpos位置切片对应的新搜索文本。

案例:

>>> str='Learning Python  with LaoYuan123'
>>> str[22:29]
'LaoYuan'
>>> patstr='LaoYuan$'
>>> pat=re.compile(patstr)
>>> pat.search(str,endpos=29)
<re.Match object; span=(22, 29), match='LaoYuan'>
>>>

上述案例中搜索文本结尾是123,但指定了结束位置刚好到搜索模式串,因此$最终匹配成功。

  1. Pattern.match(string[, pos[, endpos]])
    该方法与re.match相对应,功能相差不多,从 string 的 开始位置 能够找到这个正则样式的任意个匹配,就返回一个相应的 匹配对象。如果不匹配,就返回 None 。可选参数 pos 和 endpos 与 search() 含义相同。
    如:
>>> patstr='Python'
>>> str='LaoYuanPython'
>>> pat=re.compile(patstr)
>>> pat.match(str,7)
<re.Match object; span=(7, 13), match='Python'>
>>>
  1. Pattern.fullmatch(string[, pos[, endpos]])
    该方法与re.fullmatch()函数相对应,如果整个 string 匹配这个正则表达式,就返回一个相应的 匹配对象 。 否则就返回 None。可选参数 pos 和 endpos 与 Pattern.search() 含义相同。
    案例:
>>> pat=re.compile(r"第[一-十][章回](.)*")
>>> pat.fullmatch('第二回 悟彻菩提真妙理 断魔归本合元 ')
<re.Match object; span=(0, 19), match='第二回 悟彻菩提真妙理\u3000断魔归本合元 '>
>>>
  1. Pattern.split(string, maxsplit=0)
    等价于 re.split 函数,只是使用了编译后的正则对象来调用。
    案例:
>>> pat=re.compile(r'(\W+)')
>>> pat.split('Hello,world')
['Hello', ',', 'world']
>>>
  1. Pattern.findall(string[, pos[, endpos]])
    类似函数 re.findall函数,只是使用了正则对象来调用,比re.findall多了两个可选参数 pos 和 endpos用于限制搜索范围,这两个参数的作用与Pattern.search方法的这两个参数一样。
    案例:
>>> pat=re.compile(r'(\w+)')
>>> pat.findall('Learning python with LaoYuan')
['Learning', 'python', 'with', 'LaoYuan']
>>>
  1. Pattern.finditer(string[, pos[, endpos]])
    类似函数re.finiter() , 使用了编译后的正则对象来调用,比re.finiter()多了两个可选参数 pos 和 endpos用于限制搜索范围,这两个参数的作用与Pattern.search方法的这两个参数一样。
    案例:
>>> pat=re.compile(r"第[一-十][章回]")
>>> for i in pat.finditer("第一回灵根育孕源流出 心性修持大道生 第二回悟彻菩提真妙理 断魔归本合元神"):print(i)<re.Match object; span=(0, 3), match='第一回'>
<re.Match object; span=(19, 22), match='第二回'>
>>>
  1. Pattern.sub(repl, string, count=0)
    等价于 re.sub函数,使用了编译后的正则对象来调用。
    案例:
>>> patstr=r'(?i)(python)'
>>> pat=re.compile(patstr)
>>> pat.sub(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress')
'Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress'
>>>
  1. Pattern.subn(repl, string, count=0)
    等价于 re.subn() 函数,使用了编译后的正则对象来调用。
>>> pat.subn(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress')
('Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress', 2)
>>>

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!

第11.25节 Python正则表达式编译re.compile及正则对象使用相关推荐

  1. 第11.15节 Python正则表达式转义符定义的特殊序列

    一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...

  2. 第11.9节 Python正则表达式的贪婪模式和非贪婪模式

    在使用正则表达式时,匹配算法存在贪婪模式和非贪婪模式两种模式,在<第11.8节 Pytho正则表达式的重复匹配模式及元字符"?". "*". " ...

  3. 第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer

    一. 概述 re模块的函数search.match.fullmatch.findall.finditer都是用于搜索文本中是否包含指定模式的串,函数的参数都是一样的,第一个参数是模式串.第二个是搜索文 ...

  4. 第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式

    一. 什么是组 关于组匹配模式,Python官网上说得比较简单,也没有这个名词,只有组这个名词,老猿查了比较多的资料和做了相关测试之后才理解. 组匹配模式,就是在匹配的正则表达式中使用小括号" ...

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

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

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

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

  7. 第11.27节 Python正则小结:正则静,静则明,明则虚,虚则无为而无不为也

    正则表达式的章节到此就结束了,老猿现在觉得对我们这些身具程序猿基因特色的人来说,正则表达式应该是蛮可口的开胃小菜. 在写标题时,本来想写"正则表达式小结",后来想了想,百度了一下, ...

  8. 第6章 Python中的动态可执行方法 第6.1节 Python代码编译

    在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联. 一.    Python解释器的功能 Python虽然是解释型语言,但Python代码也是可编译 ...

  9. python正则表达式模糊匹配_用python正则表达式编译模糊正则表达式

    当我发现python regex模块可以进行模糊匹配时,我感到非常高兴,因为它似乎是解决我许多问题的简单方法. 但是现在我遇到了一个问题,我没有从文档中找到任何答案. 如何使用新的模糊性值功能将字符串 ...

  10. python正则表达式编译_用Python编译正则表达式

    嗯,这很奇怪.到目前为止,我的知识(在其他来源中,from this question)表明了我最初的答案: 第一个答案 Python缓存您使用的最后100个regex,因此即使您不显式地编译它们,也 ...

最新文章

  1. EasyUi 改变 selelct 的 下拉内容 div 的高度
  2. 译-在Python正则模式中search()和match()的区别是什么?
  3. SHOP++ JTM使用帮助
  4. 文科学业水平测试题软件,学业水平测试:文科备战理科篇
  5. Machine Monitoring System Document
  6. 那份让我想死的化工原理补考试卷
  7. Python数据库字段拆分数据
  8. 2017-10-17 开源非英文关键词编程语言
  9. mysql添加新用户
  10. 谷歌浏览器地址栏记录怎么删除 Chrome浏览器地址栏记录清除方法
  11. 吴恩达机器学习 Coursera 笔记(二) - 单变量线性回归...
  12. html+css+js实现登录页面
  13. matlab拟合高次相,matlab 多元高次非线性函数拟合,回归,求教高手!
  14. js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输
  15. 如日中天的Uber到底是用什么开发语言做到的?
  16. python源码提取_从PyInstaller打包生成的EXE文件中提取Python源码
  17. go语言webSocket框架——gorilla
  18. jQuery学习笔记(3)之Ajax下
  19. 计算机病毒与防护学生反思,计算机病毒与防治教学反思
  20. exam平台Java试题阶段(一)

热门文章

  1. swift野梦抄袭 taylor_如何看待蔡健雅新歌《半途》被指抄袭 Taylor Swift 的《Safe Sound》?...
  2. js仿百度文库文档上传页面的分类选择器_第二版
  3. cobalt strik启动
  4. 以心换心,将心比心----项目经理要学会站在客户的角度上看问题
  5. AI-统计学习(11)-改进的迭代算法及拟牛顿法
  6. 一级路由器映射二级路由器端口映射
  7. mysql atlas 文档_Atlas首页、文档和下载
  8. 阿里云服务器+N2N搭建远程办公环境
  9. 天涯上拣来的爱情哲学
  10. 总结一下面试中经常被问到的面试题,希望对各位初中级同胞有用。