Python-正则表达式

目录

一、打开正则表达式

 二、正则表达式的使用

1、限定符

(1)x*:*表示它前面的字符y 可以有0个或多个;

 (2)x+:表示它前面的字符可以出现一次以上;(+只可以匹配多次)

(3)x{}:精确指定一个字符x出现了多少次;

(4)x{2,5}:指定字符出现次数的范围,x{2,} :字符x出现2次以上;

(5)x?:字符x出现0次或1次;

2、运算符

(1)(x|y):匹配字符x或y。(xy)|(ab):匹配 xy 或ab;

3、字符类

4、元字符

5、贪婪匹配和懒惰匹配

三、正则表达式实际应用-Python实现

1、re.finadll 用法

2、re.search 用法

3、.group 用法

4、re.finditer 用法

5、re.match 和 re.fullmatch 用法

6、re.sub 和 re.subn 用法

7、re.split 用法

8、re.compile 用法

9、正则表达式实际运用

(1)匹配手机号

(2)将字符串转成字典格式


一、打开正则表达式

1、快捷键 Ctrl+R,将替换功能调出来且图中红框的位置一定要点亮,才可以使用正则表达式;

 二、正则表达式的使用

1、限定符

(1)x*:*表示它前面的字符y 可以有0个或多个;

 (2)x+:表示它前面的字符可以出现一次以上;(+只可以匹配多次)

(3x{}:精确指定一个字符x出现了多少次;

(4)x{2,5}:指定字符出现次数的范围,x{2,} :字符x出现2次以上;

(5)x?:字符x出现0次或1次;

2、运算符

(1)(x|y):匹配字符x或y。(xy)|(ab):匹配 xy 或ab;

3、字符类

[abc]+:表示匹配的字符只能取自abc

[a-z]表示所有的小写字母

[a-zA-Z]表示所有的英文字母

[a-zA-Z0-9]表示所有的英文字母和数字

[^a-zA-Z0-9]表示匹配除了尖号后面列出的所有字符之外的符号

4、元字符

正则里面的元字符基本上是以反斜杠开头的;

5、贪婪匹配和懒惰匹配

<.+>:贪婪匹配任意字符,不包括换行符

<.+?>:懒惰匹配任意字符

三、正则表达式实际应用-Python实现

注:需要用到 re 模块

1、re.finadll 用法

re.findall('.+', 'abc\ndef\nghi\n')  # 第一个参数是正则表达式,第二个参数是需要匹配的字符串
运行结果:['abc', 'def', 'ghi']
print(re.findall('.+', 'abc\ndef\nghi\n',flags=re.DOTALL))  # flags=re.DOTALL表示匹配所有的字符
运行结果:['abc\ndef\nghi\n']

查阅官方资料:

1)浏览器搜索 Python re flags;

2)找到官网并点击;


2、re.search 用法

# 用法与findall一样,唯一不同的是返回值;它只会匹配符合规则的第一个值,且返回的是一个Match对象。如果匹配不到,则返回NOne;

print(re.search('\d{3,4}', 'Tel-028-7654321'))
print(re.search('[a-z]{4,5}', 'Tel-028-7654321'))

运行结果:

<re.Match object; span=(4, 7), match='028'>
None

3、.group 用法

res = re.search('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321')print(res.group())
print(res.group(1))
print(res.group(2))

运行结果:

028-7654321
028
7654321

4、re.finditer 用法

功能:匹配所有符合规则的内容,并处理成迭代器返回;

res = re.finditer('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321 Tel-059-0123467')
print(res)
for m in res:print(m.group())# print(m.group(1))# print(m.group(2)) 

运行结果:

<callable_iterator object at 0x0000021E7D812E60>

(1)group无参数:
028-7654321
059-0123467

(2)group参数为1:

028
059

(3)group参数为2:

7654321
0123467


 补充:

# 迭代器,不依赖于索引的迭代取值方式

迭代就是重复,每一次的重复都是在上一次的基础上

 详细请读python-迭代器


5、re.match 和 re.fullmatch 用法

re.match与re.seach用法一样,也是只匹配符合规则的第一个值,并返回Match对象。

但它只能匹配字符串的开头,若匹配不到返回None;

re.fullmatch ,从头匹配到尾,也就是进行匹配整个字符串,若成功返回Match对象,否则返回None;

6、re.sub 和 re.subn 用法

re.sub功能:将匹配到的内容替换成其他内容;可以穿字符串,函数地址

(1)传字符串

res = re.finditer('(\d{3,4})-(\d{7,8})', 'Tel-028-7654321 Tel-059-0123467')
for m in res:print(m.group())
print(re.sub('(\d{3,4})-(\d{7,8})', '***', 'Tel-028-7654321 Tel-059-0123467'))y

运行结果:

028-7654321
059-0123467
Tel-*** Tel-***

(2)传内存地址 - sub功能每匹配到一个值,就会得到一个Match对象,然后调用我们传的函数,并把Match对象传给他。

脱敏后的电话号码---运于外卖上

def des(m):  # 这里是为了sub调用函数,传对象给函数,这里m接收Match对象print(f'group(1):',m.group(1))tel = m.group(2)print(f'group(2):',tel)return tel[:2] + '***' + tel[-2:]  # tel[:2]得到tel的前两位,tel[-2:]得到后两位print(re.sub('(\d{3,4})-(\d{7,8})', des, 'Tel-028-7654321 Tel-059-0123467'))

运行结果:

group(1): 028
group(2): 7654321
group(1): 059
group(2): 0123467
Tel-76***21 Tel-01***67

re.subn功能与re.sub一样,多返回了一个替换的次数

上面的例子

def des(m):tel = m.group(2)return tel[:2] + '***' + tel[-2:]print(re.subn('(\d{3,4})-(\d{7,8})', des, 'Tel-028-7654321 Tel-059-0123467'))

运行结果;

('Tel-76***21 Tel-01***67', 2)

7、re.split 用法

作用:把正则匹配到的内容作为分隔符进行拆分

s = 'xyg,- time,  !dog,  cat'
# 传统的拆分
print(f'传统拆分:', s.split(','))print(re.split('\w', s))  # \w 匹配单词字符(包括字母、数字和下划线)
print(re.split('\W', s))  # \W 匹配非单词字符
print(re.split('\W+', s))  # \W+  加上+ 表示只匹配的字符只能取自W

运行结果:

传统拆分: ['xyg', '- time', '  !dog', '  cat']
['', '', '', ',- ', '', '', '', ',  !', '', '', ',  ', '', '', '']
['xyg', '', '', 'time', '', '', '', 'dog', '', '', 'cat']
['xyg', 'time', 'dog', 'cat']

8、re.compile 用法

功能:传给它一个正则表达式,它会返回一个正则表达式对象;主要用于一个正则表达式被多次使用时。

res = re.compile('.*')
print(res.findall('Tel-028-7654321 Tel-059-0123467'))

运行结果:

['Tel-028-7654321 Tel-059-0123467', '']

9、正则表达式实际运用

(1)匹配手机号

phone_num = '''
125163251489
15812569487
15536854456
15587452256
15520361197
ab153023697
141111111111
12348567954
136489651035
13845620147
163258953255551'''print(re.findall(r'\b(13[0-9]|14[5-9]|15[0-35-9])\d{8}\b', phone_num))
print(re.findall(r'\b(?:13[0-9]|14[5-9]|15[0-35-9])\d{8}\b', phone_num))# 加r:防止转义# \b 标注字符的边界
# \d 匹配数字字符
# x{y} x字符出现y次
# x{a,b} 指定字符出现次数的范围

# 在编程语言中使用正则,如果正则表达式中出现小括号,那编程语言会把小括号视作匹配边界;也就是说会把小括号里面的内容视为一个group
# 解决方法:在小括号内的最前面加上?:,这样可以申明这个小括号不是一个group

运行结果:

['158', '155', '155', '155', '138']
['15812569487', '15536854456', '15587452256', '15520361197', '13845620147']

(2)将字符串转成字典格式

思想:

第一组:group(1)

第二组:group(2)

s = '''
Host: movie.douban.com
Pragma: no-cache
Referer: https://cn.bing.com/
'''
dic = {}
res = re.finditer('(.*): (.*)', s)
# .*:*表示它前面字符.可以有0个或多个
# : 冒号后面加空格,会因为字符串s中,冒号后面有空格for m in res:  # res写了两个小括号,就是两组小括号# print(m.group(1))# print(m.group(2))dic[m.group(1)] = m.group(2)  # 填充到字典中print(dic)

运行结果:

{'Host': 'movie.douban.com', 'Pragma': 'no-cache', 'Referer': 'https://cn.bing.com/'}

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

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

相关文章

电镀用开关电源技术详解

1 引言 在电镀行业里&#xff0c;一般要求工作电源的输出电压较低&#xff0c;而电流很大。电源的功率要求也比较高&#xff0c;一般都是几千瓦到几十千瓦。目前&#xff0c;如此大功率的电镀电源一般都采用晶闸管相控整流方式。其缺点是体积大、效率低、噪音高、功率因数低、…

[CocosCreator]CocosCreator网络通信:https + websocket + protobuf

环境 cocos creator版本&#xff1a;3.8.0 开发语言&#xff1a;ts 操作系统&#xff1a;windows http部分 直接使用 XMLHttpRequest 创建http请求 // _getHttpUrl 方法自己写字符串拼接public httpPostJsonRequest(uri: string, headData: any, data: any, cb: Function…

2024年6月大众点评深圳餐饮店铺POI分析18万家

2024年6月大众点评深圳餐饮店铺POI共有178720家 店铺POI点位示例&#xff1a; 店铺id G9TSD2JvdLtA7fdm 店铺名称 江味龙虾馆(南山店) 十分制服务评分 8.8 十分制环境评分 8.8 十分制划算评分 8.6 人均价格 128 评价数量 12840 店铺地址 南山大道与桂庙路交叉口西北角…

微信小程序 点击左上角返回弹窗提示

业务需求&#xff1a;当页面表单没有提交直接返回时&#xff0c;要提示用户是否保存当前信息&#xff0c;如果已经提交就不提示了。 由于微信小程序是无法监听右上角按钮返回事件。 所以就换个思路 小程序提供了如下两个Api wx.enableAlertBeforeUnload(Object object)&…

Python入门-基础知识-编程规范

1.缩进 在编程语言中&#xff0c;代码之间往往存在着一定的逻辑关系和层次关系。C语言和Java语言等 用“{}”分隔代码块&#xff0c;而Python用的是缩进和冒号。Python代码的缩进可以使用空格键或 Tab键来实现&#xff0c;通常情况下以4个空格或1个制表符作为1个缩进量。Pytho…

TCP协议中的三次握手和四次挥手机制

TCP协议中的三次握手和四次挥手机制 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的通信协议&#xff0c;它的三次握手和四次挥手机制是建立和断开连接的关键步骤。 三次握手&#xff1a; 第一次…

等保测评与网络安全法规的关联:构建信息安全的法律与技术双重保障

在信息化高速发展的今天&#xff0c;网络安全已经成为国家安全、社会稳定和经济发展的重要基石。为了保障网络空间的安全和稳定&#xff0c;我国制定了一系列网络安全法规&#xff0c;其中最为关键的就是《中华人民共和国网络安全法》。与此同时&#xff0c;等保测评&#xff0…

第 2 章SwiftUI 入门及文本操作

如果你之前使用过 UIKit,你会发现TextSwiftUI 中的控件与 UIKit 中的非常相似UILabel。它是一个允许你显示一行或多行文本的视图。此Text控件不可编辑,但可用于在屏幕上显示只读信息。例如,如果你想显示一条屏幕消息,你可以使用它Text来实现它。 在本章中,我们将向您展示…

RAG开发中常见的12个痛点及解决方案

受到 Barnett 等人论文《构建检索增强生成系统的七大挑战》启发&#xff0c;本文将探讨论文中提及的七大挑战及在开发 RAG&#xff08;检索增强生成&#xff09;流程中常遇到的五个额外难题。更为重要的是&#xff0c;我们将深入讨论解决这些 RAG 难题的策略&#xff0c;以便我…

使用 WebGL 创建 3D 对象

WebGL Demohttps://mdn.github.io/dom-examples/webgl-examples/tutorial/sample5/index.html 现在让我们给之前的正方形添加五个面从而可以创建一个三维的立方体。最简单的方式就是通过调用方法 gl.drawElements() 使用顶点数组列表来替换之前的通过方法gl.drawArrays() 直接…

TinTin Web3 动态精选:Aptos Builder Jam 亚洲首站即将开启,Solana 实现全网连接

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

检测SD NAND文件系统异常和修复的方法

目录 1、打开命令提示符&#xff1a; 2、运行chkdsk命令&#xff1a; 3、命令参数说明&#xff1a; chkdsk是Windows中的一个命令行工具&#xff0c;用于检查磁盘上的文件系统错误和修复坏块。MK米客方德为您提供指导&#xff0c;以下是使用chkdsk的步骤&#xff1a; 1、打开…

综合IT运维管理解决方案

综合IT运维管理解决方案 在信息化和数字化高速发展的时代&#xff0c;企业的IT运维管理已经成为保障业务连续性和提升运营效率的关键环节。高效的IT运维管理不仅能够降低运维成本&#xff0c;还能提升服务质量和用户满意度。本文将详细介绍综合IT运维管理解决方案&#xff0c;…

富格林:正规平台曝光出金招数

富格林悉知&#xff0c;在现货黄金中&#xff0c;正规盈利出金是要建立在无落入诱导风险的情况下实现的&#xff0c;投资者要关注的不仅仅是如何进行盈利&#xff0c;还要掌握正规平台曝光的交易技巧或经验。对于新手投资者来说&#xff0c;学习投资的基础知识&#xff0c;提升…

eBPF技术揭秘:DeepFlow如何引领故障排查,提升运维效率

DeepFlow 实战&#xff1a;eBPF 技术如何提升故障排查效率 目录 DeepFlow 实战&#xff1a;eBPF 技术如何提升故障排查效率 微服务架构系统中各个服务、组件及其相互关系的全景 零侵扰分布式追踪&#xff08;Distributed Tracing&#xff09;的架构和工作流程 关于零侵扰持…

华为od 2024 | 什么是华为od,od 薪资待遇,od机试题清单

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

后端系统的安全性

后端系统的安全性 后端系统的安全性是任何Web应用或服务的核心组成部分&#xff0c;它涉及保护数据、用户隐私以及系统免受恶意攻击。以下是后端安全的一些关键点&#xff1a; 认证和授权&#xff1a;确保只有经过身份验证的用户才能访问特定资源。这通常包括使用用户名/密码…

Spring Session将HttpSession保存到Redis中,实现重启应用会话不丢失

这篇文章介绍一下在springboot项目中整合Spring Session&#xff0c;将session会话信息保存到Redis中&#xff0c;防止重启应用导致会话丢失。 第一步 创建一个springboot项目&#xff0c;添加spring-session-redis的依赖&#xff0c;因为要用到reids&#xff0c;所以要把redi…

扩散模型中的UNET

目录 一、为什么UNET模型可以用于去噪网络二、扩散模型中的UNET是一个条件去噪网络&#xff0c;怎么实现的三、UNET用于分割和用去去噪的区别 一、为什么UNET模型可以用于去噪网络 下采样部分: 能够提取图像的深层次特征&#xff0c;这些特征往往包含图像的重要结构和信息&…

Python 继承:理解与应用

Python中的继承是面向对象编程中重要的概念之一&#xff0c;允许一个类&#xff08;子类&#xff09;从另一个类&#xff08;父类&#xff09;继承属性和方法。这种机制不仅能提高代码的重用性&#xff0c;还有助于构建层次化的数据模型&#xff0c;简化复杂系统的设计与维护。…