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. vue移动端图片上传压缩

    上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...

  2. 【2016常州一中夏令营Day2】

    小 W 学数学[问题描述]为了测试小 W 的数学水平,果果给了小 W N 个点,问他这 N 个点能构成的三角形个数.[输入格式]第一行一个整数 N,代表点数.接下来 N 行,每行两个非负整数 X.Y, ...

  3. Centos7网络连接不上:Network is unreachable 解决方案

    有朋友的centos7装在虚拟机上挂起后在打开不能正常连接网络,我的也出现了这个问题,试着用dhclient重新分配一下地址,无奈系统提示dhclient正在运行,没办法只能试试其它办法,之后研究了一 ...

  4. 由“Sysnative”引发的思考

    在64位的Windows系统中,有个非常神秘的文件夹“Sysnative”,你无法通过Explorer去访问它,甚至你都无法找到它,但它却扮演了一个非常重要的角色.下面我们就来聊聊它. 32位和64位 ...

  5. CentOS7.6部署k8s环境

    CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...

  6. ajax异步发送时遇到的问题

    问题原因是:controller中方法名与url中的名字不一样造成的 解决办法:找到错误的方法名,将其与url中的方法名统一:

  7. 洛谷P-4782 2-sat+Tarjan

    https://www.luogu.org/problemnew/solution/P4782 这里的大佬已经说的够好了 #include<iostream> #include<cs ...

  8. mysql主从之基于gtid的主从复制

    一 GITD介绍 1.1 gtid的含义 Global Transaction Identifier,全局事务标识 阿里云的rds目前已经使用gtid 基于gtid的主从复制原理 每个mysql数据库 ...

  9. springBoot 集成redis客户端傻瓜式流程

    Redis目前作为很多项目的主流缓存方案,学习完redis的基本命令和特性后.我们要集成进我们的springboot项目中 不废话上代码 在application.yml中加入 spring: red ...

  10. 【题解】CTSC1999家园(网络流)

    CTSC1999家园 建模方法类似我NOI2019网络同步赛我的T1写法[[题解]NOI2019Route](70分) 问题的焦点是:空间时间载具. 考虑如何击破时间限制,可以对每个点关于每个时刻建立 ...