python进阶--正则表达式(2)

2023-11-09

一、初识正则表达式

为了使计算机具有在文本中检索某种模式的能力,我们引入了正则表达式。
正则表达式为高级的文本模式匹配、抽取或者文本形式的搜素和替换功能提供了基础。利用正则表达式能够匹配多个字符串。
正则表达式的强大之处在于引入了特殊字符来定义字符集、匹配子组和重复模式。由于有了这些特殊符号,正则表达式可以匹配字符串集合,而不仅仅是某单个字符串。

特点:

灵活性、功能性、逻辑性强
可以用简单的方式对字符串实现复杂控制

二、正则匹配规则

∙ \bullet 数字和字母都表示它本身
∙ \bullet 很多字母前加 \ 会有特殊含义
∙ \bullet 绝大多数标点符号都有特殊含义,需要用加 \

三、正则匹配模式

∙ \bullet 特殊符号的含义

表示法 描述 示例 结果
liter 匹配文本字符串的字面值 foo foo
re1 I re2 匹配正则表达式re1或者re2 aIb a或者b
. 匹配任意字符(除\n) a.a 俩a间插入任意字符
^ 匹配字符串起始部分
$ 匹配字符串结束部分
* 匹配0次或多次前面出现的正则表达式
匹配1次或多次前面出现的正则表达式
+ 匹配0次或1次前面出现的正则表达式
{N} 匹配N次前面出现的正则表达式 [0-9]{3} 任意三位数
{N,M} 匹配N~M次前面出现的正则表达式 [0-9]{3,5} 任意三位数或四位数或五位数
{N,} 匹配N次以上前面出现的正则表达式
{,N} 匹配N次及以下前面出现的正则表达式
[…] 匹配来自字符集的任一字符
[.x-y…] 匹配x-y范围的任一字符
[^…] 不匹配此字符集中的任意字符
(…) 匹配封闭的正则表达式,然后另存为子组
() 表示一个分组

∙ \bullet 特殊字母的含义

表示法 描述 示例 结果
\d 匹配任意十进制数字,等同[0-9],\D表示不匹配数字
\w 表示匹配数字字母字符和 _, \W相反
\s 表示匹配任意非打印字符,如空格字符,\S匹配非空白字符
\b 匹配任何单词边界
\t 表示一个制表符

四、re模块

4.1查找相关方法

方法名 描述 格式
match 从头 查找字符串,返回一个re.Match对象,匹配失败返回None match(pattern, string, flags=0) pattern为正则匹配规则,flag为正则修饰符
search 查找整个字符串,返回一个re.Match对象,匹配失败返回None search(pattern, string, flags=0)
finditer 查找所有的匹配数据,finditer返回的结果是一个可迭代对象,里面的数据都是匹配到的结果,也是re.Match对象 finditer(pattern, string, flags=0)
findall 把查找的的所有字符串结果放到一个列表里 findall(pattern, string, flags=0)
findmatch 从头完整匹配,失败为None findmatch(pattern, string, flags=0)

4.2 替换(sub)

re.sub(pattern, repl, string, count=0, flags=0)  # repl表示替换后的字符或函数,count表示替换次数

如果repl为一个函数,sub内部会自动调用该函数并传参,参数为每一个匹配到的re.Match格式的数据

4.2 re.Match类

方法和属性 描述
pos 搜索开始的位置
enpos 搜索结束的位置
string 搜索的字符串
re 当前使用的正则表达式的对象
lastindex 最后匹配的组索引
lastgroup 最后匹配的组名
group(index=0) 某个分组匹配的结果。index=0,匹配整个正则表达式
groups() 所有分组的匹配结果,为列表类型
groupdict() 返回组名为key,每个分组的匹配结果为value的字典
start([ ]) 获取组的开始位置
end([ ]) 获取组结束的位置
sapn([ ]) 获取组的开始和结束位置
expand(template) 使用组的匹配结果来替换template的内容,并把替换后的字符串返回

4.3 re.compile类

使用方法:

  a = re.compile(正则规则)  # a为Pattern对象
  b = a.search(要匹配的字符串1)
  c = a.search(要匹配的字符串2)

五、正则修饰符

正则修饰符 描述
re.S 让 . 匹配换行
re.I 忽略大小写
re.M 让$ 匹配到换行

六、贪婪模式和非贪婪模式

在正则模式里会默认尽可能匹配更多的字符串,即贪婪模式。在贪婪模式会加 ?会切换到非贪婪模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python进阶--正则表达式(2) 的相关文章

随机推荐

  • 使用openssl命令方式生成公钥、私钥、证书

    以下是在 Windows 环境下使用 OpenSSL 命令生成这些文件的步骤 生成私钥 打开命令提示符 并导航到您希望保存私钥文件的目录 然后执行以下命令以生成私钥文件 例如 private key openssl genpkey algo
  • Java8 函数式编程

    函数式编程 这里 函数 应该理解为数学上的函数 即y f x 函数式编程的理解出发点 比如给Swing中Button添加监听器addListener Listener接口 为例 没有lambda表达式时一般都是通过匿名内部类new XXXL
  • JavaScript笔记_this指向

    this 指向问题 普通函数的this由调用规则来确定 而箭头函数的的this 本身没有this 取决于父作用域的this 代码执行后 箭头函数取决于父级作用域的this 只跟随父作用域的this改变而改变 普通函数的this取决于调用方式
  • Tomcat 无法访问,未发送任何数据

    问题描述 直接上图 解决 开启的Tomcat 的cmd窗口不要关闭 访问localhost 8080 试试 8080接口被其它服务占用了 修改8080接口 不要修改为1 1023端口和常用端口3306等 首先关闭Tomcat 双击shutd
  • 【Java】Java基础习题1

    这里写目录标题 1 编译Java应用程序源文件将产生相应的字节码文件 字节码文件的扩展名为 2 Java源程序文件的扩展名为 3 编译Java源代码 java 文件的工具为 4 执行Java字节码 class 文件的工具为 5 main方法
  • Spring Security的十一个拦截器

    目录 一 SecurityContextPersistenceFilter 二 LogoutFilter 三 AbstractAuthenticationProcessingFilter 四 DefaultLoginPageGenerati
  • 基于PaddleOCR的DBNet多分类文本检测网络

    目录 目的 模型网络结构对比 代码实现 1 数据集格式 2 配置文件调整 3 数据预处理 4 模型代码调整 5 添加多分类loss 6 修改db postprocess py 7 修改train py eval py infer det p
  • VS无法定位程序输入点于动态链接库

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 问题原因 前言 我们使用QtCreator创建的工程 使用visual studio 打开 前提是vs中安装了qt vsaddin msvc插件 VS无法定位程序输入点于动态链接库 一
  • 清除mac中自动记录的git用户名和密码

    应用程序 实用工具 双击钥匙串 右上角搜索github 右击选项删除
  • 陀螺研究院

    摘要 产业动态 由建行发起的价值30亿美元数字债券将推迟上市 15国正式签署RCEP 全球规模最大自贸协定达成 浙江省首个产业区块链赋能中心落地宁波江北 越南教育和培训部计划在2021年实施区块链技术颁发文凭 深圳市政务区块链专委会正式揭牌
  • pytorch代码实现之SAConv卷积

    SAConv卷积 SAConv卷积模块是一种精度更高 速度更快的 即插即用 卷积 目前很多方法被提出用于降低模型冗余 加速模型推理速度 然而这些方法往往关注于消除不重要的滤波器或构建高效计算单元 反而忽略了特征内部的模式冗余 原文地址 Sp
  • 图像处理(RGB分离)

    图像处理技术 RGB分离 最近学习了图像处理技术 第一个小工程做的事将一张图片的rgb分离 存为三张图片 就像PS中的RGB通道的三张图片一样 我们先准备两张24位真彩色图片 一张宽度像素为4的倍数 一张则不是 我们来看下它的文件头和信息头
  • js文字朗读

    var u new SpeechSynthesisUtterance function read text speed u text text u lang zh u rate speed speechSynthesis speak u
  • 游戏开发安卓知识杂谈系列:关于下载jdk

    想要下载jdk11 去oracle官网下载jdk 发现jdk13以下的版本需要账号登陆 但是去注册账号发现官网账号无法注册 找了半天 网上说Oracle自java SE 8的某个版本以后 需要进行付费才能下载 两个解决办法 找百度网盘或者第
  • webpack使用(5)之处理CSS

    一 需要引入的loader 1 style loader 主要负责创建style标签 并将标签塞入到文档中 2 css loader 主要负责css解析 3 less loader 负责解析less 二 如何引入css资源 1 安装配置st
  • 【数据结构】哈希表

    散列表 也叫哈希表 是根据关键码值而直接进行访问的数据结构 它通过把关键码值映射到表中一个位置来访问记录 以加快查找的速度 哈希表的核心是合适的hash函数 数据范围 解决冲突的办法 这里通过数字分析法设计哈希函数 链地址法解决从冲突 冲突
  • 2023华为OD机试真题【敏感字段加密/字符串风格】【2023.Q2】

    题目描述 给定一个由多个命令字组成的命令字符串 1 字符串长度小于等于127字节 只包含大小写字母 数字 下划线和偶数个双引号 2 命令字之间以一个或多个下划线 进行分割 3 可以通过两个双引号 来标识包含下划线 的命令字或空命令字 仅包含
  • 【机器学习】通俗易懂决策树(实战篇)python实现(为新患者找到合适的药物)

    决策树 我们将学习一种更流行的机器学习算法 决策树 我们将使用此算法从患者的历史数据以及他们对不同药物的反应大数据中 用训练过的决策树来构建分类模型预测未知患者的类别 或者说为新患者找到合适的药物 导入以下包 numpy as np pan
  • docker快速学习--容器的数据卷--04

    一 数据卷概念 数据卷是宿主机中的一个目录或文件 当容器目录和数据卷目录绑定后 对方的修改会立即同步 一个数据卷可以被多个容器同时挂载 一个容器也可以被挂载多个数据卷 二 数据卷作用 容器数据持久化 外部机器和容器间接通信 数据交互 容器之
  • python进阶--正则表达式(2)

    一 初识正则表达式 为了使计算机具有在文本中检索某种模式的能力 我们引入了正则表达式 正则表达式为高级的文本模式匹配 抽取或者文本形式的搜素和替换功能提供了基础 利用正则表达式能够匹配多个字符串 正则表达式的强大之处在于引入了特殊字符来定义