当前位置: 首页 > news >正文

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/'}

相关文章:

Python-正则表达式

目录 一、打开正则表达式 二、正则表达式的使用 1、限定符 &#xff08;1&#xff09;x*&#xff1a;*表示它前面的字符y 可以有0个或多个&#xff1b; &#xff08;2&#xff09;x&#xff1a;表示它前面的字符可以出现一次以上&#xff1b;&#xff08;只可以匹配多次&…...

教程:在 Kubernetes 集群上部署 WordPress 网站

WordPress 是专为每个人设计的开源软件&#xff0c;强调创建网站、博客或应用程序的可访问性、性能、安全性和易用性。WordPress 是一个基于 PHP 的内容管理系统&#xff08;CMS&#xff09;&#xff0c;使用 MySQL 作为数据存储&#xff0c;目前很多网站、电商独立站、个人博客…...

聊一聊 C# 弱引用 底层是怎么玩的

一&#xff1a;背景 1. 讲故事 最近在分析dump时&#xff0c;发现有程序的卡死和WeakReference有关&#xff0c;在以前只知道怎么用&#xff0c;但不清楚底层逻辑走向是什么样的&#xff0c;借着这个dump的契机来简单研究下。 二&#xff1a;弱引用的玩法 1. 一些基础概念 …...

蜘蛛池规矩采集优化与运用技巧 什么是蜘蛛池/SEO蜘蛛池怎么养?(蜘蛛池新手入门虚良SEO)

作为一名网络内容修改&#xff0c;我常常需求从各种网站上收集文章并转载到咱们的网站上。而在这个过程中&#xff0c;我深深感受到了蜘蛛池对我的帮助。今日&#xff0c;我就来共享一下我对蜘蛛池收集规矩的亲自感受。 归纳 本文将分9个方面具体介绍蜘蛛池收集规矩的长处和运…...

SerDes介绍以及原语使用介绍(1)OSERDESE2

文章目录 前言&#xff1a;为什么需要serdes一、OSERDESE2框图二、OSERDESE2端口信号二、OSERDESE2原语参数三、OSERDESE2时序3.1、SDR模式3.2、DDR模式3.3、DDR模式下三态传输 前言&#xff1a;为什么需要serdes 需要 SerDes&#xff08;串行器/解串器&#xff09;主要是为了…...

基于单片机和组态王的温度监控系统的设计

摘 要 : 介绍了以 MSP430 单片机为核心 , 建立基于 DS18B20 和组态王的温度采集和监控系统。主要研究了单片机和组态王的通用通讯协议。按照 KingView 提供的通信协议 , 设计组态王与单片机的通信程序 , 实现了组态王与M SP430 单片机的直接串行通讯。在中药提取装置的…...

unity 导入的模型设置讲解

咱们先讲Model这一栏 Model Scene&#xff1a;场景级属性&#xff0c;例如是否导入灯光和照相机&#xff0c;以及使用什么比例因子。 Scale Factor&#xff1a;缩放因子&#xff08;也就是模型导入后大小如果小了或者大了在这里直接改是相当于该模型的大小的&#xff0c;而且在…...

汽车 vSOC安全运营管理平台开发解决方案

汽车 vSOC 安全解决方案 一、引言 随着汽车行业的快速发展,汽车的智能化和互联化程度越来越高,汽车网络安全问题也日益凸显。汽车 vSOC(Vehicle Security Operations Center)作为汽车网络安全的重要组成部分,其作用越来越受到重视。本方案旨在提供一套可实施落地的汽车 vS…...

python 第三方库

一、什么是第三方库 python的三方库指的是&#xff0c;需要通过pip install 安装后才能使用的 python 工具 三方库有很多&#xff1a; 做web自动化测试的库&#xff1a;selenium单元测试框架&#xff1a;pytest、unittest做app自动化测试&#xff1a;Python-Appium-Client做接…...

VMware Workstation环境下,DHCP服务的安装配置,用ubuntu来测试

需求说明: 某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器…...

CSS实现文字颜色渐变

直接上代码和效果图&#xff1a; <p class"linecolor">文字颜色渐变</p><style type"text/css">.linecolor{font-size: 30px;background-image:-webkit-linear-gradient(bottom,red,#fd8403,yellow);-webkit-background-clip:text;-web…...

《每天5分钟用Flask搭建一个管理系统》第4章:模板渲染

第4章&#xff1a;模板渲染 4.1 模板的概念和使用 模板是一种用于生成输出的方法&#xff0c;它允许您将Python代码和HTML标记混合在一起&#xff0c;从而创建动态网页。 示例代码&#xff1a;基本模板 <!-- templates/home.html --> <!DOCTYPE html> <html…...

逆向学习汇编篇:指令的操作

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/660c759dea95​​ 在逆向工程中&#xff0c;深入理解汇编语言的指令操作是至关重要的。汇编指令是计算机硬件与软件之间的桥梁&#xff0c;它们直…...

VB.net实战(VSTO):VSTOwpf体验框架打包教程

如果是考虑到Wps用户较多&#xff0c;就不建议采用侧边栏的形式 只是个体验框架&#xff0c;界面未作美化&#xff0c;office的用户可以用任意一种窗体&#xff0c;喜欢那个界面就写那个界面&#xff0c;wps的侧边栏只能弹出一部分&#xff0c;每次需要的手动拖动。 打包了案例…...

Jquery 获得Form下的所有text、checkbox等表单的值

Jquery使用表单我主要是想获得某一个表单下的所有text获得checkbox的值: 可以这样写: var parameter{}; $("input[typetext]",document.forms[0]).each(function(){ alert(this.name); }); 获得所有名为hobby的选中的checkbox的值和form2下的所有text的值 function s…...

stl之string

构造函数 void test1() {string s1;//不传参cout << s1 << endl;string s2("123456");cout << s2 << endl;string s3(s2);cout << s3 << endl;string s4(s2, 1, 5);cout << s4 << endl;string s5("123456&quo…...

Vue3学习笔记<->nginx部署vue项目

安装nginx vue项目通常部署到nginx上&#xff0c;所以先安装一个nginx。为了方便安装的是windows版nginx&#xff0c;解压就能用。 项目参考上一篇文章《Vue3学习笔记&#xff1c;-&#xff1e;创建第一个vue项目》《Vue3学习笔记&#xff1c;-&#xff1e;创建第一个vue项目》…...

使用 WebGL 创建 3D 对象

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

百度地图3d区域掩膜,最常见通用的大屏地图展现形式

需求及效果 原本项目使用的是百度地图3.0,也就是2d版本的那个地图&#xff0c;客户不满意觉得不够好看&#xff0c;让把地图改成3d的&#xff0c;但是我们因为另外的系统用的都是百度地图&#xff0c;为了保持统一只能用百度地图做 经过3天的努力&#xff0c;最后我终于把这个…...

小区物业管理收费系统源码小程序

便捷、透明、智能化的新体验 一款基于FastAdminUniApp开发的一款物业收费管理小程序。包含房产管理、收费标准、家属管理、抄表管理、在线缴费、业主公告、统计报表、业主投票、可视化大屏等功能。为物业量身打造的小区收费管理系统&#xff0c;贴合物业工作场景&#xff0c;轻…...

C++实现一个简单的Qt信号槽机制

昨天写这个文章《深入探讨C的高级反射机制&#xff08;2&#xff09;&#xff1a;写个能用的反射库》的时候就在想&#xff0c;是不是也能在这套反射逻辑的基础上&#xff0c;实现一个类似Qt的信号槽机制&#xff1f; Qt信号槽机制简介 所谓的Qt的信号槽&#xff08;Signals …...

微信小程序常用的传值

1.通过 URL 传参 在页面跳转时&#xff0c;可以在 URL 中携带参数进行传递&#xff0c;然后在目标页面的 onLoad 生命周期中获取参数。 // 在页面 A 中跳转到页面 B 并传递参数 wx.navigateTo({url: /pages/detail/index?id123 });// 在页面 B 的 onLoad 生命周期中获取参数…...

SQL面试真题解答 数据统计分析,求“同比、环比”等(SQL窗口函数使用)

SQL面试真题解答 数据统计分析&#xff0c;求“同比、环比”等&#xff08;SQL窗口函数使用&#xff09; 环比、环比增长率、同比、同比增长率&#xff0c;根据百度百科上的 说明&#xff1a; 环比增长率 环比增长率&#xff0c;一般是指和上期相比较的增长率。 环比增长率&a…...

【递归、搜索与回溯】floodfill算法二

floodfill算法二 1.被围绕的区域2.太平洋大西洋水流问题3.扫雷游戏4.衣橱整理 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.被围绕的区域…...

Dataease安装,配置Jenkins自动部署

Dataease安装&#xff0c;配置Jenkins自动部署 一.安装Dataease 安装前准备&#xff1a;1.Ubuntu20.04 LTS国内源安装指定版本Docker 2.docker-compose安装 下载离线安装的安装包&#xff0c;下载地址&#xff1a;https://community.fit2cloud.com/#/download/dataease/v1-…...

关于IDEA启动报错 【JAVA_HOME does not point to a valid JM installation】

希望文章能给到你启发和灵感&#xff5e; 感谢支持和关注&#xff5e; 阅读指南 一、基础环境说明1.1 硬件环境1.2 软件环境 二、起因 一、基础环境说明 考虑环境因素不同&#xff0c;大家适当的对比自己的软硬件环境情况分析&#xff5e; 1.1 硬件环境 MacOS Monterey 版本 1…...

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本&#xff0c;将所有代码复制到记事本中&#xff0c;保存文件时候修改文件后…...

Oracle中的序列(Sequence)是一种数据库对象

Oracle中的序列&#xff08;Sequence&#xff09;是一种数据库对象&#xff0c;用于生成数字序列&#xff0c;通常用于为主键列生成唯一、连续的数值。以下是一些使用序列的案例&#xff1a; 1. **为主键生成唯一值**&#xff1a; 在Oracle中&#xff0c;序列最常用的场景是…...

热点观察 | 《姜饼人王国》新作来袭、《Monopoly GO!》荣登5月全球畅销榜榜首

本周出海热点&#xff1a; 1. 中国品牌借欧洲杯打响知名度 2. 米哈游玩家切割二次元 3. 6月27日&#xff0c;Steam游戏《六月衷曲》上线TapTap 4. 《Monopoly GO!》荣登5月全球畅销榜榜首 5. 《地下城与勇士》拿下本周亚洲T1市场畅销榜冠军 6. 《姜饼人王国》新作强势登顶…...

智能网络构建:探索大模型在网络领域的应用

网络领域以其高度复杂性和快速迭代为特点&#xff0c;完成从网络设计、配置、诊断到安全的网络任务需要广泛的专业知识。这些任务的固有复杂性&#xff0c;加上网络技术和协议不断变化的格局&#xff0c;为传统基于机器学习的方法带来了显著的障碍。这些方法在泛化和自动化网络…...