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 远程患者监控与诊断 总结 嵌入式物联网在医疗行业中的应…

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…

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关系。这种关系…

FPGA文档阅读

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

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

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

19-2 LLM之野望 2 - LLM给到Quora面临的困境

Quora 有一个简单的前提&#xff1a;它是一个分享知识和专业知识的地方&#xff0c;好奇的人可以就任何可以想象到的话题提出问题&#xff0c;并从平台博学的社区获得深思熟虑的、见识广博的答案。 想想雅虎答案 (Yahoo Answers)&#xff0c;它适用于技术员工和格拉德威尔式的…

农业旅游与乡村旅游:融合绿色田野与诗意远方的经济新篇章

在这个快节奏的时代&#xff0c;人们对于回归自然、体验淳朴生活的渴望日益增强。农业旅游与乡村旅游&#xff0c;作为新兴的旅游形态&#xff0c;正逐步成为连接城市与乡村的桥梁&#xff0c;不仅为都市人提供了一片心灵的栖息地&#xff0c;也为农村地区带来了前所未有的发展…

Python3.4.4 32位

Python 3.4.4是Python编程语言的一个稳定版本&#xff0c;发布于2015年&#xff0c;主要针对32位操作系统设计。对于那些仍然运行Windows XP的用户来说&#xff0c;这是他们可以安装的最高版本的Python&#xff0c;因为从Python 3.5开始&#xff0c;官方停止了对Windows XP的支…

Apache BookKeeper 一致性协议解析

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。Pulsar 存储层依托于 BookKeeper 组件&#xff0c;所以本文简单探讨一下 BookK…

Six common classification algorithms in machine learning

分类算法是一种机器学习算法&#xff0c;其主要目的是从数据中发现规律并将数据分成不同的类别。分类算法通过对已知类别训练集的计算和分析&#xff0c;从中发现类别规则并预测新数据的类别。常见的分类算法包括决策树、朴素贝叶斯、逻辑回归、K-最近邻、支持向量机等。分类算…

DDei在线设计器-HTML渲染

Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上&#xff0c;从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形&#xff0c;从而获得更加丰富的图形展现。 通常情况下&#xff0c;我们创建的图形控件&#xff…

springboot的简单应用

Mvc与三层架构 创建Spring项目 勾选web和mabais框架 配置yml文件&#xff0c;这里创建spring项目默认生成的是propertise文件&#xff0c;但是properties文件的格式看起来没有yml文件一目了然。yml文件配置数据库还有映射mapper层的xml文件以及设置日志级别&#xff0c;比如map…

去中心化技术的变革力量:探索Web3的潜力

随着区块链技术的发展和应用&#xff0c;去中心化技术正成为数字世界中的一股强大变革力量。Web3作为去中心化应用的新兴范式&#xff0c;正在重新定义人们对于数据、互联网和价值交换的认知。本文将探索去中心化技术的基本概念、Web3的核心特征及其潜力应用&#xff0c;展示其…