re 模块的引入

  • Python 自1.5版本起增加了re模块,它提供 Perl 风格的正则表达式模式。

  • re模块使 Python 语言拥有全部的正则表达式功能。

re 模块的使用

参数含义

  • pattern: 字符串形式的正则表达式
  • string: 要匹配的字符串
  • flags: 可选,表示匹配模式
  • pos:可选,字符串中开始搜索的位置索引
  • endpos:可选,endpos 限定了字符串搜索的结束
  • 不填pos endpos默认扫描全部

re.compile()

compile(pattern, flags=0)

  • 将正则表达式的样式编译为一个 正则表达式对象 (正则对象)
  • 可以使用正则对象调用match()等函数
>>> test = '1 one 2 two 3 three'
>>> a=re.compile(r'\d+')
>>> b=a.match(test)
>>> print(f"输出:{b[0]}") 输出:1

re.match()与re.search()

re.match

re.match(pattern, string, flags=0)

Pattern.match(string, pos, endpos)

  • 如果 string 的 开始位置 能够找到这个正则样式的任意个匹配,就返回一个相应的 匹配对象。如果不匹配,就返回 None
  • 可以使用group(num)groups() 匹配对象函数来获取匹配表达式
    • group(num=0) 表示匹配的整个表达式的字符串
    • group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
    • groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
>>> test = '1 one 2 two 3 three'
>>> a=re.compile(r'(\d+) (\w+)')
>>> b=a.match(test)
>>> print(f"输出:{b.group()}")
>>> print(f"输出:{b.group(2)}")
>>> print(f"输出:{b.group(1,2)}")
>>> print(f"输出:{b.groups()}") 输出:1 one
输出:one
输出:('1', 'one')
输出:('1', 'one')
  • Match.start([group])Match.end([group])

    • 返回 group 匹配到的字串的开始和结束标号。
    • 如果 group存在,但未产生匹配,就返回 -1
  • Match.span([group])
    • 对于一个匹配 m ,返回一个二元组 (m.start(group), m.end(group))
    • 注意如果 group 没有在这个匹配中,就返回 (-1, -1)

re.search()

re.search(pattern, string, flags=0)

Pattern.search(string, pos, endpos)

  • 扫描整个 string 寻找第一个匹配的位置, 并返回一个相应的 匹配对象。如果没有匹配,就返回 None
  • 其他与match()一致
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.search(test)
>>> c = a.match(test)
>>> print(c)
>>> print(f"输出:{b.group()}")
>>> print(f"输出:{b.group(2)}")
>>> print(f"输出:{b.group(1,2)}")
>>> print(f"输出:{b.groups()}") 输出:None
输出:2 two
输出:two
输出:('2', 'two')
输出:('2', 'two')

区别

  • match()只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None
  • search()匹配整个字符串,直到找到一个匹配

re.findall()与re.finditer()

re.findall()

re.findall(pattern, string, flags=0)

Pattern.findall(string, pos, endpos)

  • 对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回
  • 如果样式里存在一到多个组,就返回一个组合列表;就是一个元组的列表(如果样式里有超过一个组合的话)
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.search(test)
>>> b=a.findall(test)
>>> print(f"输出:{b}") 输出:[('2', 'two'), ('3', 'three')]

re.finditer()

re.finditer(pattern, string, flags=0)

Pattern.finditer(string, pos, endpos)

  • pattern 在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了 匹配对象
>>> test = 'one 2 two 3 three'
>>> a = re.compile(r'(\d+) (\w+)')
>>> b = a.finditer(test)
>>> print(f"输出:{b}")
>>> for i in b:
print(f"输出:{i}") 输出:<callable_iterator object at 0x036E7BD0>
输出:<re.Match object; span=(4, 9), match='2 two'>
输出:<re.Match object; span=(10, 17), match='3 three'>

区别

  • 二者最大的区别在于一个返回列表,一个返回迭代器

re.sub()与re.subn()

re.sub()

re.sub(pattern, repl, string, count=0, flags=0)

  • repl : 替换的字符串,也可为一个函数。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • 最后返回替换结果
>>> test = '1 one 2 two 3 three'
>>> a=re.sub(r'(\d+)','xxx',test)
>>> print(f"输出:{a}")
>>> print(f"输出:{test}") 输出:xxx one xxx two xxx three
输出:1 one 2 two 3 three

re.subn()

re.subn(pattern, repl, string, count=0, flags=0)

参数含义同上

  • 功能与re.subn相同,但是返回一个元组 (字符串, 替换次数)
>>> test = '1 one 2 two 3 three'
>>> a=re.subn(r'(\d+)','xxx',test)
>>> print(f"输出:{a}")
>>> print(f"输出:{test}") 输出:('xxx one xxx two xxx three', 3)
输出:1 one 2 two 3 three

re.split()

re.split(pattern, string, maxsplit=0, flags=0)

maxsplit:表示分割次数,默认为0,表示无限制

  • 用 pattern 分开 string
  • 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里
>>> test = '1 one 2 two 3 three'
>>> a = re.split(r'\d+', test)
>>> b = re.split(r'(\d+)', test)
>>> print(f"输出:{a}")
>>> print(f"输出:{b}") 输出:['', ' one ', ' two ', ' three']
输出:['', '1', ' one ', '2', ' two ', '3', ' three']

正则表达式修饰符(匹配模式)

    re.I	使匹配对大小写不敏感
re.L 做本地化识别匹配
re.M 多行匹配,影响 ^ 和 $
遇到\n视为新的一行,重新匹配 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

Python3 正则表达式 re 模块的使用 - 学习笔记的更多相关文章

  1. python3 正则表达式re模块

    正则表达式的功能:字符串的模糊匹配查询import re元字符 . ---->匹配除换行符意外的任意字符 ^ ---->匹配行首位置 $ ---->匹配行尾位置 关于重复的元字符 * ...

  2. python3 正则表达式 re模块之辣眼睛 计算器

    额...学到几个常用模块了,也要其中考试了,每天晚上敲一点,敲得脑壳疼,不过又想到好一点的办法了,有时间再改吧. 此非吾所欲也,实属无奈也....复习之路漫漫,吾将到书上求索,在此不多逗留,我挥一挥衣 ...

  3. co模块源码学习笔记

    // Sorrow.X --- 添加注释,注释纯属个人理解 /** * slice变量 引用 数组的 slice方法 */ var slice = Array.prototype.slice; /** ...

  4. Nginx模块之Nginx-Ts-Module学习笔记(一)抢险体验

    1.通过HTTP接收MPEG-TS2.生产和管理Live HLS 3.按照官方的编译和配置,当然了我是第一次编译没有通过,在作者重新调整下,编译成功,感谢:@arut https://github.c ...

  5. python 排序模块 ———— heapq(学习笔记)

    from heapq import * def heasort(initi):# 排序 h=[] for value in initi: heappush(h,value)#将每一个item进入hea ...

  6. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  7. AVAWEB学习笔记 ---- 系列文章

    [JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...

  8. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  9. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

随机推荐

  1. 慕课网electron写音乐播放器教程,代码跟随教程变动(十)

    添加播放状态,首先是歌曲名称和时间 在index.html中添加 <div class="container fixed-bottom bg-white pb-4"> ...

  2. 善用GIMP(Linux下的Photoshop),图像处理轻松又自由

    善用GIMP(Linux下的Photoshop),图像处理轻松又自由 作者: 善用佳软 日期: 2013-02-16 分类: 2 图像影音 标签: GIMP, image 1. GIMP是什么? GI ...

  3. destoon信息或者公司归属多个类别的解决方式

    有时候,一条信息属对应于多个类别,在destoon原生系统里是没有这个解决方案 在公司行业类别选择的地方实现了这个功能,但是选择体验不太好,不符合我当前的需求,目前我写了如下解决方案 系统代码如下: ...

  4. androidBLE dfu升级使用及可能出现的问题

    android-dfu-library是nordic提供的对nRF5x芯片固件进行空中升级的库,地址是https://github.com/NordicSemiconductor/Android-DF ...

  5. 【sublime】Pretty Json插件的安装与配置使用

    一.安装 Package Control  代码安装 从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去并 ent ...

  6. 三句话说清楚ssh端口转发

    看了下自己以前的笔记发现也没有完全搞清楚, 网上好多文章都是抄来抄去,远程端口转发全都是拿127.0.0.1举例 总结了下,三句话就可以讲清楚了   1 ssh本地端口转发是 把ssh服务器可以访问到 ...

  7. Python学习3月5号【python编程 从入门到实践】---》笔记(3)4

    1.字典 #####修改字典里面的KEYS数值和VALUES数值要用中括号# alien_0={'color':'green','point':5}# alien_0['color']='red'# ...

  8. 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)

    [题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...

  9. ELK部署检测nginx日志demo

    ELK E: ElasticSearch 搜索引擎 存储 https://www.elastic.co/cn/downloads/elasticsearch L: Logstash 日志收集 http ...

  10. 程序员初学者参考 ---懂得基础语法后如何做一个自己的case?

    对于很多人来说,我懂java语法,甚至面向对象的特性啦这些都是有了解的,但我就是不会做项目,其实项目真有那么难吗? 对于基础不牢固的人来说,我还不会这个基础点,那个还没学呢,你让我做个项目,我保证做不 ...