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}")

输出:

输出:

输出:

区别

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

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模块_Python3 正则表达式 re 模块的使用 - 学习笔记相关推荐

  1. 正则表达式必知必会学习笔记

    正则表达式必知必会学习笔记 @(正则表达式)[regex,正则表达式,正则] 基本概述 <正则表达式必知必会>是一本很薄的书,花了两个小时左右将全书通读了一遍.这本书基本将正则表达式的常用 ...

  2. python3 collections模块_Python3之内建模块collections

    collections是python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不可变集合,例如,一个点的二维坐标可以表示成 >>> ...

  3. python3 random函数_Python3 中 random模块

    Python3 中 random模块 Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() 用于生成一个0到1的 随机浮点数:0& ...

  4. python3 logging模块_Python3之logging模块浅析

    Python3之logging模块浅析 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可 ...

  5. python3 collections模块_Python3之collections模块

    简介 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple namedtuple 是一个函数,它用来创建一个自定义的元组对象,并且规定了元组元素的个数 ...

  6. python3 ftp模块_python3利用pyftpdlib模块启动ftp服务

    环境: win7 旗舰版 python @3.6.1 pyftpdlib @1.5.4 python客户端上官网下载:python 安装的时候勾上pip还有add path 环境变量. pyftpdl ...

  7. python3 random模块_Python3 中 random模块

    Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 im ...

  8. python3 ftp启动_python3利用pyftpdlib模块启动ftp服务

    环境: win7 旗舰版 python @3.6.1 pyftpdlib @1.5.4 python客户端上官网下载:python 安装的时候勾上pip还有add path 环境变量. pyftpdl ...

  9. python正则表达式模块_Python正则表达式函数模块

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍python中常用的正则表达式处理函数. 方法/属性 作用 match() 决定 R ...

最新文章

  1. Android 图片缓存之内存缓存技术LruCache,软引用
  2. 安全开发流程(SDL)
  3. Linux 的面试小题 8
  4. python提取excel数据-使用Python从Excel获取运营数据
  5. aspose.word在某个字后面自动换行_在Arctime里制作字幕如何自动换行?如何添加注释、广告语?...
  6. 详细解读CSS优先级——Web前端系列学习笔记
  7. SAP gateway GWaaS single sign on
  8. php常驻对象,php对象
  9. 对esp和ebp分析来了解函数的调用过程
  10. PL/SQL之高级篇
  11. mysql 索引表的应用_MySQL查询优化之索引的应用详解
  12. cmi码型变换matlab程序_58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!...
  13. SecureCRT 下载安装与连接(转)
  14. 如何在JUnit5中使用Mockito
  15. 手把手 | 用Python语言模型和LSTM做一个Drake饶舌歌词生成器
  16. 喝酒神器微信小程序源码 支持流量主解锁多人对战
  17. 如何利用Photoshop进行快速切图
  18. “斜杠青年”多巴胺,这次把手伸进了梦里
  19. iOS-如何开发一款类 Runkeeper 的跑步应用 (上)
  20. Coding 配置SSH凭据

热门文章

  1. Spring5参考指南:IOC容器
  2. Redis实现消息队列的4种方案
  3. MapReduce 论文翻译
  4. elasticsearch_script_01
  5. Leecode02-两数相加——Leecode热题100道系列
  6. 1036 Boys vs Girls (25 分)_27行代码AC
  7. 简洁易懂:c:out标签详解
  8. exfat linux 读写速度,Ubuntu / Xubuntu : 读写 exFAT 文件系统
  9. 交通安全与智能控制专业学计算机吗,交通安全与智能控制专业排名好不好_主要课程及就业前景分析...
  10. sum 去重_Excel函数,用到什么学什么!多条件求和神器之SUMIFS和去重