python—正则表达式

文章目录

  • 导入re模块
  • 常用的元字符
  • re模块
  • match方法
  • 分组
  • 贪婪匹配
  • 编译

Python中的正则表达式是一种强大的文本处理工具,它使用一种特殊的语法来描述字符串的模式。Python通过re模块提供了对正则表达式的支持。使用正则表达式,你可以进行复杂的文本搜索、替换和验证等操作。
所以判断一个字符串是否是合法的Email的方法是:

  • 创建一个匹配Email的正则表达式
  • 用该正则表达式去匹配用户的输入来判断是否合法

导入re模块

在使用正则表达式之前,你需要先导入Python的re模块。

import re

常用的元字符

Python中常见的元字符有:
在这里插入图片描述
要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n~m个字符。
A|B可以匹配A或B,所以(P|p)ython可以匹配’Python’或者’python’。

re模块

Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用\转义,所以要特别注意:
s = ‘ABC\001’ ,s类型为str,即Python最基本的字符串
由于’‘会对’'进行转义,故对应的正则表达式字符串变成:‘ABC\001’
实例:

print("ABC\\001")
#输出结果:ABC\001

如果使用r标记字符串,那么就不再需要考虑转义的问题了:
s = r’ABC\001’
对应的正则表达式字符串不变:‘ABC\001’
实例:

print(re.match(r"\w+\\\d+","ABC\\001"))
#输出结果:<re.Match object; span=(0, 7), match='ABC\\001'>

推荐在Python中进行正则表达式匹配时,使用r前缀标记字符串

match方法

re模块提供了一个match方法,可以判断正则表达式是否匹配
match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None

    phone_num = "0551-123456789"print(re.match(r"\d{4}-\d{3,8}",phone_num))
#输出结果:<re.Match object; span=(0, 13), match='0551-12345678'>

match方法通常会结合if选择结构进行判断:
在这里插入图片描述

分组

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group),比如:

t = "19:59:59"
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)",t).groups())
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)",t).group(1))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)",t).group(2))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)",t).group(3))
#输出结果:('19', '59', '59')
#19
#59
#59

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。
注意:group(0)永远是与整个正则表达式相匹配的字符串,group(1)、group(2)…表示第1、2、……个子串。

贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
例如,匹配出数字后面的0:

num = "1101230000000"
print(re.match(r"^(\d+?)(0+)$",num).groups())
#输出结果:('110123', '0000000')

?结束贪婪匹配,^ 表示行的开头,^\d表示必须以数字开头,$ 表示行的结束,\d$表示必须以数字结束。

编译

当在Python中使用正则表达式时,re模块内部会干两件事情:

  • 编译正则表达式,如果正则表达式的字符串本身不合法,会报错
  • 用编译后的正则表达式去匹配字符串
    如果一个正则表达式要重复使用几千次,出于效率的考虑,可以使用compile方法预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配。
    实例:
num1 = "1201230000000"
num2 = "1101200000000"
num3 = "1201100000000"
re_comp = re.compile(r"^(\d+?)(0+)$")
print(re_comp.match(num1))
print(re_comp.match(num2))
print(re_comp.match(num3))
#输出结果:
#<re.Match object; span=(0, 13), match='1201230000000'>
#<re.Match object; span=(0, 13), match='1101200000000'>
#<re.Match object; span=(0, 13), match='1201100000000'>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【单片机毕业设计选题24072】-基于单片机的智能停车场管理系统

系统功能: 1.根据RFID卡卡号判断新老用户&#xff0c;老用户不计费直接放行&#xff0c;新用户放行时显示计费结果 2.显示屏显示车位剩余数量 3.检测车位有车亮红灯&#xff0c;无车亮绿灯&#xff0c;能够实现车位诱导 5.车辆出停车场时&#xff0c;能根据停车时间计算停车…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证&#xff0c;官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

GitHub私有派生仓库(fork仓库) | 派生仓库改为私有

GitHub私有派生仓库 前言解决方案 前言 在GitHub上Fork的派生仓库默认为公有仓库&#xff0c;且无法修改为私有仓库。 若想创建私有的派生仓库&#xff0c;可通过GitHub的导入仓库功能实现&#xff0c;具体步骤请参见下文解决方案。 解决方案 打开GitHub页面&#xff0c;在个…

嵌入式物联网在医疗行业中的应用——案例分析

作者主页: 知孤云出岫 目录 嵌入式物联网在医疗行业中的应用——案例分析引言1. 智能病房监控1.1 实时患者监控系统 2. 智能医疗设备管理2.1 设备使用跟踪与维护 3. 智能药物管理3.1 药物分配与跟踪 4. 智能远程医疗4.1 远程患者监控与诊断 总结 嵌入式物联网在医疗行业中的应…

基于深度学习的数据增强

基于深度学习的数据增强技术旨在通过生成或变换现有数据&#xff0c;来提高模型的泛化能力和鲁棒性。数据增强在图像、文本、语音等各种类型的数据处理中都起着至关重要的作用。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 数据增强的主要任务和目标包括&#xff…

后端开发: 如何去使用公共组件

在日常编写接口的途中&#xff0c;使用公共组件是必不可少的事情&#xff0c;在编写产品导入和导出的接口开发时&#xff0c;被组长告知&#xff0c;需要使用公共组件去编写这2个接口&#xff0c;随后就发给我公共组件项目地址。 接下来我先介绍公共组件&#xff1a; 什么是公…

Keka for Mac v1.4.3 中文下载 解压/压缩工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件2、文件访问权限修改3、访达扩展 安装完成&#xff01;&#xff…

LNMP环境配置问题整理

首先是一键安装直接报错&#xff1a; 换教程&#xff1a;搭建LNMP&#xff0c;步骤最详细&#xff0c;附源码&#xff0c;学不会打我-CSDN博客 mysql安装成功之后&#xff1a; MySQL 启动报错&#xff1a;Job for mysqld.service failed because the control process exited …

前端开发_注意事项

无论使用哪种框架开发&#xff08;vue、react、...&#xff09;&#xff0c;前端开发终究是结构&#xff08;HTML&#xff09;、样式&#xff08;CSS&#xff09;、逻辑&#xff08;用户操作数据处理对接后端API&#xff09;。那么开发过程中都需要注意哪些事项&#xff0c;本文…

设计模式:使用最广泛的代理模式

需求场景 按着惯例&#xff0c;还是以一个应用场景作为代理模式的切入点。现在有一个订单系统&#xff0c;要求是:一旦订单被创建&#xff0c;只有订单的创建人才可以修改订单中的数据&#xff0c;其他人则不能修改。 基本实现思路 按着最直白的思路&#xff0c;就是查询数据…

IDEA中内敛局部变量对话窗是什么?

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

mmaction输出tensorboard日志

参考文档&#xff1a; 从 MMAction2 0.x 迁移 — MMAction2 1.2.0 文档 修改mmaction2/configs/_base_/default_runtime.py&#xff0c;将代码&#xff1a; vis_backends [dict(typeLocalVisBackend)]改为&#xff1a; vis_backends [dict(typeLocalVisBackend), dict(ty…

juicefs 一致性

1. 多客户端并发读写一致性 并发写场景 对于同一个chunk不可机器client的并发写&#xff0c;后写的会覆盖之前写的&#xff1b;元数据更新是事务更新&#xff0c;数据更新是写时复制&#xff08;不覆盖&#xff09; 对于跨chunk的不同机器client的并发写&#xff0c;juicefs本身…

华为OD机试D卷 --快速人名查找--24年OD统一考试(Java JS Python C C++)

文章目录 题目描述输入描述输出描述用例题目解析java源码js源码python源码c源码c++源码题目描述 给一个字符串,表示用’,’分开的人名。 然后给定一个字符串,进行快速人名查找,符合要求的输出。 快速人名查找要求︰人名的每个单词的连续前几位能组成给定字符串,一定要用…

sip对话(dialog)、sip会话(session)、sip call-leg的区别和联系

一&#xff0e;sip对话和sip会话的区别和联系 1. 区别 1&#xff09;定义和范围&#xff1a; 对话&#xff08;Dialog&#xff09;&#xff1a;对话是指两个SIP用户代理&#xff08;User Agent&#xff0c;UA&#xff09;之间通过SIP消息交换建立的端到端的SIP关系。这种关系…

Kotlin实现SHA-256哈希和RSA签名

1. 对一段原始字符串&#xff0c;实现SHA 哈希签名&#xff0c;即hashMessage&#xff1b; 2. 用私钥key 对SHA后的字符串信息签名&#xff0c;即signatureMessage&#xff1b; 3. 用公钥key验证私钥签名的信息&#xff08;私钥签名的原始字符串是SHA-256哈希的字符串&#x…

GitHub介绍

GitHub 是一个基于 Git 的在线代码托管平台&#xff0c;用于版本控制和协作。下面是一些常用的 Git 命令&#xff0c;这些命令可以帮助你在本地和 GitHub 之间管理和同步代码仓库&#xff1a; 初始化和配置 初始化本地仓库 git init这将在当前目录下创建一个新的 Git 仓库。 …

Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器

Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器 一、概述二、连接器的工作原理安全快照初始快照的默认工作流程行为临时快照触发临时增量快照触发临时阻塞快照增量快照增量快照流程Debezium 如何解决具有相同主键的记录之间的冲突快照窗口触发增量快照具有附加…

FPGA文档阅读

FPGA的文档没有相应的基础还真不容易看懂&#xff0c;下面是B站上对FPGA文档的解读(本文非对文档解读&#xff0c;只是为个人记录第三期&#xff1a;CycloneIV E最小系统板设计&#xff08;一&#xff09;从Datasheet上获取FPGA的基本参数_哔哩哔哩_bilibili 电源部份 核心电…

算法力扣刷题记录 五十二【617.合并二叉树】

前言 二叉树篇&#xff0c;继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要…