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.rhkb.cn/news/359278.html

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

相关文章

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 泛型编程 首先让我们来思考一个问题&#xff0c;如何实现一个交换函数&#x…

晨持绪科技:开好一家抖音小店运营怎么做

在数字时代&#xff0c;抖音小店以其独特的社交媒体优势迅速崛起&#xff0c;成为许多创业者的新宠。但如何有效运营&#xff0c;却是一门学问。首要任务是确定你的小店定位&#xff0c;这关系到后续的产品选择、目标客户群及营销策略。定位明确后&#xff0c;接下来便是挑选适…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

使用 GitHub Actions 编译和发布 Android APK

使用 GitHub Actions 编译和发布 Android APK 在现代软件开发中&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;已成为不可或缺的一部分。对于 Android 开发者来说&#xff0c;自动化编译和发布 APK 不仅节省时间&#xff0c;还能确保每次发布的一致性。本文将介…

电脑用什么录屏?这3款软件你值得拥有

随着电脑技术的发展&#xff0c;录屏已经成为用户日常办公、学习、娱乐的重要工具之一。录屏软件种类繁多&#xff0c;功能各异&#xff0c;但如何选择合适的录屏软件成为用户面临的难题。本文将介绍电脑用什么录屏&#xff0c;并推荐三款软件&#xff0c;通过对比分析各自的特…

24.6.16

星期一&#xff1a; 补cf global round26 C2 cf传送门 思路&#xff1a;有效操作2只有一次&#xff0c;且反转后不会再出现负数&#xff0c;即后面能贡献 2^n-i个方案&#xff0c;再乘上前面 2^(k>0的次数) 代码如下&…

Golang | Leetcode Golang题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; func fractionToDecimal(numerator, denominator int) string {if numerator%denominator 0 {return strconv.Itoa(numerator / denominator)}s : []byte{}if numerator < 0 ! (denominator < 0) {s append(s, -)}// 整数部分numer…

解决安全规模问题:MinIO 企业对象存储密钥管理服务器

在强大可靠的存储解决方案领域&#xff0c;MinIO 作为持久层脱颖而出&#xff0c;为组织提供安全、持久和可扩展的存储选项。MinIO 通常负责处理关键任务数据&#xff0c;在确保高可用性方面发挥着至关重要的作用&#xff0c;有时甚至在全球范围内。存储数据的性质&#xff0c;…

Codepen Three.js环境依赖配置

Codepen Three.js环境依赖配置 前言 如果想在CodePen环境写Three.js依赖的项目&#xff0c;环境搭建可以参考该Codepen项目: Chill the lion 详细 打开设置可以看到以下配置 更多项目参考 1. Chill the Lion Chill the Lion 是一个基于 ThreeJS 制作的 WebGL 示例。它由…

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

大腾智能,基于云原生的国产工业协同平台

大腾智能是一家基于云原生的国产工业软件与数字化协同平台&#xff0c;专注于推动企业数字化转型与升级&#xff0c;为企业提供一系列专业、高效的云原生数字化软件及方案&#xff0c;推动产品设计、生产及营销展示的革新&#xff0c;实现可持续发展。 大腾智能旗下产品 3D模型…

美的集团员工自爆工资+年终奖收入明细,网友说:这待遇,老婆根本不让跳槽!...

发现需求&#xff1a;研究与实践是关键 在任何领域&#xff0c;只要深入研究&#xff0c;就会发现无数的需求。如果没有发现需求&#xff0c;那只能说明对行业的了解还不够透彻。学校通过考试发现学生的问题&#xff0c;职场上也一样&#xff0c;通过不断实践发现问题。理论知识…

XSS+CSRF组合拳

目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 &#xff08;案例中将使用cms靶场来进行演示&#xff09; 在实战中CSRF利用条件十分苛刻&#xff0c;因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

Adobe Premiere 视频编辑软件下载安装,pr 全系列资源分享!

Adobe Premiere以其强大的功能、灵活的操作和卓越的性能&#xff0c;成为视频编辑领域的佼佼者。 在剪辑方面&#xff0c;Adobe Premiere提供了强大而灵活的工具集。用户可以在直观的时间线上对视频进行精细的裁剪、剪辑和合并操作。无论是快速剪辑短片&#xff0c;还是精心打造…

我真是反感那些叉劈。

再转一下&#xff0c;想看的自己提取吧。

MyBatis 动态 SQL怎么使用?

引言&#xff1a;在现代的软件开发中&#xff0c;数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域&#xff0c;MyBatis 作为一款优秀的持久层框架&#xff0c;以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

前端也需要知道的一些常用linux命令

前端也需要知道的一些常用linux命令 1.问题背景2.连接工具&#xff08;SecureCRT_Portable&#xff09;a.下载工具b.连接服务器c.登录到root账户 3.基本命令a.cd命令和cd ..b.ll命令和ls命令c:cp命令d.rm命令e:rz命令f.unzip命令g.mv命令h.pwd命令&#xff08;这里没有用到&…

【CPP】交换排序:冒泡排序、快速排序

目录 1.冒泡排序简介代码分析 2.快速排序2.1霍尔版本简介代码分析 2.2挖坑版本2.3前后指针版本2.4非递归的快排思路代码 什么是交换排序&#xff1f; 基本思想&#xff1a;所谓 交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0…

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据…