Python高级(三)_正则表达式

news2024/9/9 4:41:47

Python高级-正则表达式

第三章 正则表达式

在开发中会有大量的字符串处理工作,其中经常会涉及到字符串格式的校验。

1、正则表达式概述

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

2、re模块

一个正则表达式(或RE)指定了一集与之匹配的字符串;模块内的函数可以让你检查某个字符串是否跟给定的正则表达式匹配模块定义了几个函数,常量,和一个例外。有些函数是编译后的正则表达式方法的简化版本(少了一些特性)。绝大部分重要的应用,总是会先将正则表达式编译,之后在进行操作

那现在我们先熟悉re模块的一简单的方法

compile方法
re.compile(pattern[,flags])
# 作用:把正则表达式语法转化成正则表达式对象
pattern:正则表达式语法
flags定义匹配模式包括:{
   
re.I:忽略大小写
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依赖于当前环境
re.M:多行模式
re.S:' . '并且包括换行符在内的任意字符(注意:' . '匹配任意字符但不包 括换行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依赖于 Unicode 字符属性数据库
}
search方法
re.search(pattern, string[, flags=0])
# 作用:扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。
pattern : 正则表达式对象
string : 要被查找替换的原始字符串。
flags定义匹配模式包括:{
   
re.I:忽略大小写
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依赖于当前环境
re.M:多行模式
re.S:' . '并且包括换行符在内的任意字符(注意:' . '匹配任意字符但不包括换行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依赖于 Unicode 字符属性数据库
}
match方法
re.match(pattern, string[, flags=0])
# 作用:从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
pattern : 正则表达式对象
string : 需要匹配的字符串
flags定义匹配模式包括:{
   
re.I:忽略大小写
re.L:表示特殊字符集 \w,\W,\b,\B,\s,\S 依赖于当前环境
re.M:多行模式
re.S:' . '并且包括换行符在内的任意字符(注意:' . '匹配任意字符但不包括换行符)
re.U:表示特殊字符集 \w,\d,\D,\S 依赖于 Unicode 字符属性数据库
}

这里我们分别简单了解一下这些模块,

1、compile方法是将正则表达式转换成对象,

2、search和match方法是根据compile对象转换生成好的规则,进行匹配。

那我们将上方的思考题拿下来,先看思考一下

# 导入模块
>>> import re
# 如何判断一个字符串是手机号呢
tel_1 = '''aesdf13811011234
    aa1a3hi233rhi3
    87156340
    affa124564531346546
    afa19454132135'''
# 这里我们不说的过于复杂了,也不说特殊号码了,简单了解一下规则
# 1、由11位正整数字组成
# 2、第一位数字必须由1开头,第二位数字由3-9组成
# 根据这些条件这里即可以生成一个匹配式 1[3,9]\d{9},下面我们会讲解上匹配语法与规则
pattern = re.compile(r'1[3,9]\d{9}')
# 使用search方法,匹配到一个电话号码
print(re.search(pattern, tel_1))
    #<re.Match object; span=(7, 18), match='13811011234'>
# 再使用match方法,输出了None
print(re.match(pattern, tel_1))
None

# -----------------------------------------------

# 那我们换一个例子再看,
tel_2 = '''19454132135abuw'''
# 再将匹配表达式转换成匹配对象
pattern = re.compile(r'1[3,9]\d{9}')
# 先使用search方法
print(re.search(pattern, tel_2))
#<re.Match object; span=(0, 11), match='19454132135'>
# 再使用match方法,看到对象响应的结果,出现了需要匹配的号码
print(re.match(pattern, tel_2))
#<re.Match object; span=(0, 11), match='19454132135'>

我们可以发现,更多的时候,我们在字符串或者是一堆单词内容里面不确定范围搜索,可以使用search来进行匹配第一个最先匹配到的正常的电话号码,而match用来匹配第一个注意是第一个字符的,这里的第一个是在被搜索的这串字符的第一位索引上的

这里面我们根据返回回来的内容,看到有三部分

1、re.Match object 对象
2、span=()搜索结果在文本索引位置
3、match匹配结果

这里我们现在就需要急切了解到两个问题

第一、得到的匹配对象re.Match object该如何处理,以及re模块是否存在一些其他的方法

第二、正则表达式的写法

3、Match对象

我们来看一下,Match对象,Match对象是一次匹配的结果,包含匹配的很多信息

Match匹配对象的属性
在这里插入图片描述

>>> import re
>>> tel_1 = '''
    aesdf13811011234
    aa1a3hi233rhi3
    87156340
    affa124564531346546
    afa19454132135'''
>>> pattern = re.compile(r'1[3,9]\d{9}')
>>> results = re.search(pattern, tel_1)
# pos表示搜索的开始的位置,endpos搜索结束的位置
>>> print(results.pos, results.endpos)
0 83
# group表示匹配的结果
>>> print(results.group())
13811011234
>>> tel_2 = '''19454132135abuw'''
>>> results = re.search(pattern, tel_2)
# pos表示搜索的开始的位置,endpos搜索结束的位置
>>> print(results.pos, results.endpos)
0 15
# group表示匹配的结果
>>> print(results.group())
19454132135>>> results = re.search(pattern, tel_2)
# pos表示搜索的开始的位置,endpos搜索结束的位置
>>> print(results.pos, results.endpos)
0 15
# group表示匹配的结果
>>> print(results.group())
19454132135

4、正则表达式

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配元字符 (参见 python 模块 [re 文档](re — 正则表达式操作 — Python 3.12.4 文档))

字符 功能
. 匹配任意字符(不包括换行符)
A 匹配开始位置,多行模式下匹配每一行的开始,(也有取反的意思,区分应用场景)
$ 匹配结束位置,多行模式下匹配每一行的结束
* 匹配前一个元字符0到多次
匹配前一个元字符1到多次
? 匹配前一个元字符0到1次
{m,n} 匹配前一个元字符m到n
\ 转义字符,跟在其后的字符将失去作为特殊元字符的含义,
例如.只能匹配.,不能再匹配任意字符
[] 字符集, 一个字符的集合,可匹配其中任意一个字符
| 逻辑表达式或,比如a
(…) 分组,默认为捕获,即被分组的内容可以被单独取出,

默认每个分组有个索引,从1开始,按照"("的顺序决定索引值
(?iLmsux) 分组中可以设置模式,iLmsux之中的每个字符代表一个模式
(?:…) 分组的不捕获模式,计算索引时会跳过这个分组
(?P…) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
(?#…) 注释,不影响正则表达式其它部分
(?=…) 顺序肯定环视,表示所在位置右侧能够匹配括号内正则
(?!..) 顺序否定环视,表示所在位置右侧不能匹配括号内正则
(?<=…) 逆序肯定环视,表示所在位置左侧能够匹配括号内正则
(?<!..) 逆序否定环视,表示所在位置左侧不能匹配括号内正则
(?(id/name)yes|no) 若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则
\number 匹配和前面索引为number的分组捕获到的内容一样的字符串
VA 匹配字符串开始位置,忽略多行模式
\Z 匹配字符串结束位置,忽略多行模式
\b 匹配位于单词开始或结束位置的空字符串
\B 匹配不位于单词开始或结束位置的空字符串
\d 匹配一个数字,相当于[0-9]
\D 匹配非数字,相当于[^0-9]
\s 匹配任意空白字符,相当于[\t\n\r\fv]
\S 匹配非空白字符,相当于[^\t\n\r\flv]
\w 匹配数字、字母、下划线中任意一个字符,相当于[a-zA-Z0-9]
\W 匹配非数字、字母、下划线中的任意字符,相当于-[^\w]

5、表示字符

在这里插入图片描述

’ . ’ 用法
# 导入模块
>>> import re
# 测试匹配任意字符(不包括换行符)使用的re中的match方法
>>> print(re.match(".","a").group())
'a'
>>> print(re.match(".","1").group())
'1'
>>> print(re.match(".","_").group())
'_'
>>> print(re.match(".","0").group())
'0'
# 只有匹配到'\n'时候提示None,说明,匹配任意字符(不包括换行符)
>>> print(re.match(".","\n"))
None
’ [ ] ’ 用法
# 导入模块
>>> import re
# 匹配字符集,区间中的集合,可匹配其中任意一个字符,使用的re中的match方法
# 如果hello的首字符小写,那么正则表达式需要小写的h
>>> print(re.match("h","hello Python").group())
'h'
# 如果hello的首字符大写,那么正则表达式需要大写的H
>>> print(re.match("H","Hello Python").group())
'H'
# 大小写h都可以的情况
>>> print(re.match("[hH]","hello Python").group())
'h'
>>> print(re.match("[hH]","Hello Python"

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

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

相关文章

springboot企业培训管理系统-计算机毕业设计源码50804

摘要 本研究旨在开发一套高效、安全、易用的springboot企业培训管理系统。该系统致力于提升企业的培训管理效率&#xff0c;确保培训质量与效果的持续优化。通过整合先进的AI技术&#xff0c;在企业培训管理中发挥着不可或缺的作用。 通过采用Java作为主要开发语言&#xff0c;…

AI Earth——2020年中国建筑物高度CNBH数据产品(10m)

数据介绍: 复旦大学生命科学学院GC3S团队(吴万本博士、赵斌教授等)利用多源地球观测数据和机器学习技术,构建了中国第一个10米分辨率的建筑高度估计模型(CNBH-10m)。基于此模型建立了中国10米分辨率的建筑高度数据集。此数据集基于全天候地球观测(雷达、光学和夜光图像)…

USB PD SINK协议取电芯片不同品牌介绍对比-在选择PD SINK 协议芯片时,用户需要综合考虑各方面的因素,包括工作耐压、稳定性、兼容性等

PD SINK协议芯片是现代通信技术中的一项重要技术&#xff0c;它起着连接不同系统的桥梁作用。协议芯片内部集成了各种不同的通信协议&#xff0c;如蓝牙、Wi-Fi、以太网等&#xff0c;使不同设备之间的通信变得更加简单和高效。协议芯片推动了信息通信技术的发展。在过去&#…

赋能 Web3 与 AI 的未来,TARS 协议如何重塑去中心化生态?

TARS 协议如何在 Web3 生态中引领 AI 技术的变革&#xff1f;作为新兴的模块化 AI 平台&#xff0c;TARS 通过整合先进的 AI 模型和区块链技术&#xff0c;为用户提供了更加智能、安全和高效的解决方案。让我们一起回顾第 16 期 TinTinAMA 的精彩内容吧&#xff01; 在 TinTinL…

1. openstack

openstack 一、云的简介1、优势2、类型2.1 根据提供的服务范围2.2 根据提供服务不同 二、openstack核心组件1、核心组件2、nova组件2.1 nova核心进程 3、glance组件4、cinder组件5、neutron组件6、swift组件7、cellometer组件8、keystone组件9、heat组件10、dashboard 一、云的…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置&#xff0c;安装不灵活&#xff0c;续签需要配置计划任务&#xff0c;签发单域名证书或者通配证书需要不同的指令和配置&#xff0c;繁琐&#xff0c;如果自己程序想要对接签发证书的api有的不支持&#xff0c;有的用起来繁琐。 最近发…

性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!

在如今这个高度数字化的时代&#xff0c;我们的生活离不开各种电子设备&#xff0c;而充电宝作为保障电子设备续航的重要工具&#xff0c;其地位日益凸显。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和产品&#xff0c;要挑选到一款性价比高的充电宝并非易事。在这篇盘点…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip&#xff1a; 引言 自摄影术发明以来&#xff0c;黑白图像一直是记录历史和艺术创作的重要手段。然而&#xff0c;黑白图像虽然具备其独特的美…

idea中打开静态网页端口是63342而不是8080

问题&#xff1a; 安装了tomcat 并且也配置了环境&#xff0c;但是在tomcat下运行&#xff0c;总是在63342下面显示。这也就意味着&#xff0c;并没有运行到tomcat环境下。 找了好几个教程&#xff08;中间还去学习了maven&#xff0c;因为跟的教程里面&#xff0c;没有maven,但…

2024年国企都在用哪些eHR人事系统?(附国企HR系统功能分享)

近年来&#xff0c;国家也一直在寻求国企改革上的突破。但是部分国有企业在经营过程中&#xff0c;出于历史和现实的多重影响&#xff0c;人力资源管理工作迟迟没有较大进展&#xff0c;还存在诸多不适应现代企业发展的弊端存在。随着科技进步&#xff0c;许多国企正转向创新的…

【昇思25天学习打卡营打卡指南-第二十三天】Pix2Pix实现图像转换

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到…

2024最新版pycharm安装激火教程,附安装包+激huo马,Python教程,pycharm安装包!!

PyCharm的安装 PyCharm 是一个专门为 Python 开发者设计的 IDE&#xff0c;它同样具有代码导航、重构、调试和分析等功能。PyCharm 支持多种项目类型&#xff0c;如普通项目、Python 测试项目、Django 项目等&#xff0c;并提供了大量的内置模板和插件&#xff0c;以帮助您更快…

【项目实战课】大语言模型提示词(Prompt)工程实战

欢迎大家来到我们的项目实战课&#xff0c;本期内容是《大语言模型提示词&#xff08;Prompto&#xff09;工程实战》。所谓项目课&#xff0c;就是以简单的原理回顾详细的项目实战的模式&#xff0c;针对具体的某一个主题&#xff0c;进行代码级的实战讲解。 本课程内容 提示词…

自动化(二正)

Java接口自动化用到的技术栈 技术栈汇总&#xff1a; ①Java基础&#xff08;封装、反射、泛型、jdbc&#xff09; ②配置文件解析(properties) ③httpclient&#xff08;发送http请求&#xff09; ④fastjson、jsonpath处理数据的 ⑤testng自动化测试框架重点 ⑥allure测试报…

cuda安装使用问题,print(torch.cuda.is_available()),仍然输出false,如何解决?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

springboot it职业生涯规划系统lw源码调试演示视频

第3章 系统分析 面对即将开发的系统&#xff0c;进行提前的分析是必要的。这也是开发流程中必须有的环节。通常分析系统期间&#xff0c;主要涉及的内容包括系统开发可行性问题&#xff0c;对系统功能和性能的分析等问题。 3.1 可行性分析 在正式对需要建设的项目进行投资前&…

UNI_App平台调试指南 debug(十五)

App平台调试指南 debug 常规开发里,在 HBuilderX 的运行菜单里运行 App,手机端的错误或 console.log 日志信息会直接打印到控制台。 如果需要更多功能,比如审查元素、打断点 debug,则需要启动调试模式。自 HBuilderX 2.0.3+ 版本起开始支持 App 端的调试。 #打开调试窗口…

Transformer特辑

https://github.com/LongxingTan/Machine-learning-interview 模型结构 基本单元&#xff1a;token_embedding positional encoding, encoder, token_embedding positional encoding, decoderencoder: (self-attention, skip-connect, ln), (ffn, skip-connect, ln)decoder:…

为什么说精益变革失败的本质是企业丧失自我批评能力?

在商界的浩瀚星空中&#xff0c;那些曾经熠熠生辉的成功企业&#xff0c;有时也难逃衰落的命运。当它们陷入困境&#xff0c;尝试通过精益变革来重振旗鼓时&#xff0c;往往面临诸多挑战。然而&#xff0c;仔细观察这些企业的变革过程&#xff0c;我们不难发现&#xff0c;精益…

全网最全AI绘画 StablDiffusion系列进阶篇-ControlNet插件介绍

大家好&#xff0c;我是设计师阿威 之前&#xff0c;我已经分享了众多AI绘画方面的学习教程文章&#xff0c;对于想自娱自乐的小伙伴们来说&#xff0c;这些内容应该已经足够使用了。但如果你的工作需要更精细的控制&#xff0c;想要达到更专业的水准&#xff0c;那就得进一步…