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,一经查实,立即删除!

相关文章

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

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

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() 直接…

检测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;…

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、基础算法① 贪心思维② 二分查…

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;这些特征往往包含图像的重要结构和信息&…

原型开发:加速需求验证与设计优化

目录 前言1. 原型开发的意义1.1 定义与概述1.2 原型的类型 2. 原型开发的优势2.1 明确需求2.2 提升用户满意度2.3 降低开发风险 3. 原型开发的挑战3.1 过多的原型开发3.2 资源投入与管理3.3 期望管理 4. 优化原型开发流程4.1 明确目标与范围4.2 选择合适的工具和方法4.3 加强用…

【MySQL基础篇】概述及SQL指令:DDL及DML

数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释&#xff1a;定义与基本概念&#xff1a; 数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库不仅仅是数据的简单堆积&#xff0c;而是遵循一定的规则…

C++之STL(十一)

1、迭代器适配器 2、插入迭代器 #include <iostream> #include <vector> #include <algorithm> #include <list> using namespace std;void showVec(const vector<int>& v) {for (vector<int>::const_iterator it v.begin(); it ! v.…

视频压缩怎么压缩最小,怎么把视频压缩的很小

压缩视频怎么压缩到很小&#xff1f;视频是我们在生活中不可或缺的一部分&#xff0c;随着制作视频的小伙伴越来越多&#xff0c;大家都想把制作好的视频上传到一些平台或传给别人&#xff0c;有时候我们会遇到视频内存过大的问题&#xff0c;今天我给大家介绍一个快速把视频压…

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库&#xff0c;它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中&#xff0c;这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级&#xff1a;SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…

万物皆可爬——亮数据代理IP+Python爬虫批量下载百度图片助力AI训练

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【导航大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

注意!!2024下《网络规划设计师》易混淆知识点来了,赶紧码住

宝子们&#xff0c;在复习软考网络规划设计师中&#xff0c;是不是觉得有很多知识点含义比较相近&#xff0c;很多友友刚看的时候&#xff0c;估计会像我一样把它们弄混&#xff0c;作为一个软考老鸟&#xff0c;在这里给大家整理了网规学习过程中易混淆的知识点&#xff0c;大…

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)​编辑转到底部 In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterprise Edition Oracle Database Cloud Schema Service - Version N/A and lat…

Ngnix内存池——高并发实现高效内存管理

目录 一、高并发下传统方式的弊端 1、常用的内存操作函数 2、弊端一 3、弊端二 4、弊端三 5、弊端四 二、弊端解决之道 1、内存管理维度分析 2、内存管理组件选型 三、高并发内存管理最佳实践 1、内存池技术 2、内存池如何解决弊端 3、高并发内存池如何实现 四、…

《数字图像处理与机器视觉》案例二(基于边缘检测和数学形态学焊缝图像处理)

一、前言 焊缝是评价焊接质量的重要标志&#xff0c;人工检测方法存在检测标准不统一&#xff0c;检测精度低&#xff0c;焊缝视觉检测技术作为一种重要的质量检测方法&#xff0c;正逐渐在各行各业中崭露头角。把焊缝准确的从焊接工件中准确分割出来是焊缝评价的关键一步&…

linux上git的使用

目录 1.测试是否安装有git 2.下载项目到本地 3.三板斧 1.将代码放在创建的目录中 2.提交改动到本地 3.提交代码到远端 4.注意点 以及补充内容 1.测试是否安装有git 如果输入git --help 会显示下面一大串那么就是已经安装&#xff0c;否则需要自行手动安装 yum install g…