正则表达式基础
正则表达式基础
一、初识正则表达式
思考–问题答案在文末
- 问题1:text1 = ‘height:178,weight:168,sid:123456,passwd:9527’,如何快速找出密码?
- 问题2:text2 = ‘他的电话是18812345678x,他的生日是20000908,他爱好的数字是01234567891,他的座机是:0571-52152166’,如何快速匹配座机?
- 问题3:text3 = ‘1234567@qq.com’ ,如何检测邮箱格式是否正确?
Q1:什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
Q2:他有什么用处?
- 判断给定的字符串是否符合正则表达式的过滤逻辑(验证):(验证:登录信息、手机号、邮箱地址)
- 可以通过正则表达式,从字符串中获取我们想要的特定部分(匹配)
常见匹配字符
符号 | 描述 |
---|---|
. | 匹配处换行符\n之外任意1个字符 |
[] | 匹配[]中任意一个 |
\d | 一个0-9数字 |
\D | 匹配非数字 |
\w | 匹配单词字符:a-z、A-Z、0-9 |
\W | 匹配非单词字符 |
\s | 匹配空格、tab健 |
\S | 匹配非空格,tab健 |
常用的匹配规则-匹配字符数量
-
匹配前一个字符出现0次或者无数次
-
匹配前一个字符出现1次或者无数次
符号 | 描述 |
---|---|
? | 匹配前一个字符出现0次或者1次 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符出现至少m次 |
{n,m} | 匹配前一个字符出现n-m次 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
| | 或 |
(ab) | 将括号中字符作为一个分组 |
二、 python正则表达式处理模块----re
2.1re.match函数----对字符串进行匹配
#re.match()函数,可以对字符进行匹配,查找的位置是从指定的位置开始一直往后找,返回第一个符合规则的对象,如果开始位置不符合匹配队形则返回None。而如果从起始位置开始没有匹配成功,即便其他部分包含需要匹配的内容,re.match()也会返回None。
import re
#基本的语法格式:match(pattern,string,flags=0)
#其中第一个参数是需要进行匹配的内容,第二个参数表示的是一个匹配的字符串,最后一个参数这是一个控制正则表达式的匹配方式,是一个可选的参数,
s1 = 'height:178 weight:168,sid:123456,passwd:9527'
re2 = re.match('[a-zA-Z]+\W\d+\s\w+',s1)
print(re2)s = "python is the bset language"
re1 = re.match('(.*)\s(\w+)\s(\w+)(\s\w+)(\s\w+)',s)
print(re1)
print(re1.group())
print(re1.group(1))
print(re1.group(2))
print(re1.group(3))
print(re1.span())*******************print*********************************
<re.Match object; span=(0, 17), match='height:178 weight'>
<re.Match object; span=(0, 27), match='python is the bset language'>
python is the bset language
python
is
the
(0, 27)
2.2 re.findall()
findall匹配所有返回一个列表,这个方法使用频率较高。
import re
text = 'height:178,weight:168,sid:123456,passwd:9527'
print(re.findall(r'[a-zA-Z]+',text))
text2 = '12232443@qq.com'
print(re.findall(r'\d{6,10}@qq.com',text2))
text3 = 'syyang2022@163.com'
print(re.findall(r'\w+@\w+.\w{2,3}$',text3))
#print(re.findall(r'^[a-zA-Z-_]+@[a-zA-Z-_]+.[a-zA-Z-_]+',text3))
text4 = '10.10.10.10'
print(re.findall(r'\d{1,3}.\d+.\d+.\d+',text4))
#print(re.findall('\D+',text))*******************print*********************************
['height', 'weight', 'sid', 'passwd']
['12232443@qq.com']
['syyang2022@163.com']
['10.10.10.10']
2.3 re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。search 在全文中匹配一次,匹配到就返回 函数语法: re.search(pattern, string, flags=0) 示例: 输出结果: searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
import re
s = "Cats are smarter than dogs"
re2 = re.search('are',s)
print(re2)
print(re2.group())*******************print*********************************
<re.Match object; span=(5, 8), match='are'>
are
2.4 re.sub()
检索和替换 re.sub()将匹配到的数据进行替换。 语法:re.sub(pattern, repl, string, count=0, flags=0) 示例: 输出结果: 电话号码是: 2019-0101-000 电话号码是 : 20190101000
import re
s = "python is the bset language"
re2 = re.sub('p','P',s,count=1)
print(re2)s = "2019-0101-000"
re2 = re.sub('-','',s,count=0)
print(re2)*******************print*********************************
Python is the bset language
20190101000
2.5 re.compile
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供其他函数使用,我们常用的正则表达式方法,都已经自带了compile了。 语法格式为: re.compile(pattern[, flags]) 示例: 输出结果: None <_sre.SRE_Match object; span=(3, 5), match=‘12’> 12
s1 = 'height:178,weight:168,sid:123456,passwd:9527'
pattern = "\d*"
re2 = re.match(pattern,s1)
print(re2)*******************print*********************************
<re.Match object; span=(0, 0), match=''>
2.6 re.split()
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下: re.split(pattern, string[, maxsplit=0, flags=0]) 示例: 输出结果: [‘www’, ‘huawei’, ‘com’]
import re
text = 'www.huawei.com'
print(re.split('w',text,))
print(re.split('\.',text))*******************print*********************************
['', '', '', '.hua', 'ei.com']
['www', 'huawei', 'com']
三、写正则表达式的步骤
我们仍然以包含分机号码的座机电话号码为例,比如0571-88776655-9527,演示下面的步骤:
确定模式包含几个子模式
它包含3个子模式:0571-88776655-9527。这3个子模式用固定字符连接。
各个部分的字符分类是什么
这3个子模式都是数字类型,可以用\d。现在可以写出模式为:
\d-\d-\d
各个子模式如何重复
第1个子模式重复3到4次,因为有010和021等直辖市
第2个子模式重复7到8次,有的地区只有7位电话号码
第3个子模式重复3-4次
加上次数限制后,模式成为:
\d{3,4}-\d{7,8}-\d{3,4}
但有的座机没有分机号,所以我们用或运算符让它支持两者:
\d{3,4}-\d{7,8}-\d{3,4}|\d{3,4}-\d{7,8}
是否有外部位置限制
没有
是否有内部制约关系
没有
经过一通分析,最后的正则就写成了,测试一下:
import re
text = '18812345678是他的手机号,他的身份证号是41188123456780978,他爱好的数字是01234567891,他的座机是:0571-52152166'
print(re.findall(r'^1\d{10}|\d{4}-\d{8}', text))*******************print*********************************
['18812345678', '0571-52152166']
掌握常见匹配符合及规则就够日常使用
四、4个问题答案
-
问题1:text1 = ‘height:178,weight:168,sid:123456,passwd:9527’,如何快速找出4位数字密码?
import re text1 = 'height:178,weight:168,sid:123456,passwd:9527' print(re.findall(r'\d{4}$',text1))*******************print********************************* ['9527']
-
问题2:text2 = ‘他的电话是18812345678x,他的生日是20000908,他爱好的数字是01234567891,他的座机是:0571-52152166’,如何快速匹配座机?
import re text2 = '他的电话是18812345678x,他的生日是20000908,他爱好的数字是01234567891,他的座机是:0571-52152166'print(re.findall(r'\d{4}-\d{8}',text2))*******************print********************************* ['0571-52152166']
-
问题3:text3 = ‘1234567@qq.com’ ,如何检测qq邮箱格式是否正确?
import re text3 = '1234567@qq.com' print(re.findall(r'\d{6,10}@\w+.\w{2,3})',text3))*******************print********************************* ['1234567@qq.com']
日常笔记,共勉
相关文章:
正则表达式基础
正则表达式基础 一、初识正则表达式 思考–问题答案在文末 问题1:text1 ‘height:178,weight:168,sid:123456,passwd:9527’,如何快速找出密码?问题2:text2 ‘他的电话…...

【Linux】进程间通信之命名管道
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...

【内存管理】页表映射
页表的一些术语 现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语: 全局目录项,PGD(Page Global Directory) 上级目录项,PUD(Page Upper Directory) 中间目…...

Cloudpods 强大的多云管理平台部署
简介 Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度,帮助企业…...
深度学习的可微渲染
深度学习的可微渲染 可微渲染(Differentiable Rendering)是深度学习领域的一个重要概念,它将传统的计算机图形学与深度学习结合起来,通过使渲染过程可微分(differentiable),以便于在深度学习模…...

CAS Server Restful接口实现后台认证
背景 对于一些比较复杂定制化登录页的情况下,之前提到过可以自定义修改使用CAS Server提供的登录页这种操作已经明显跟不上复杂定制场景了,所以CAS Server也提供了支持Restful接口,支持服务端后台登陆,对于复杂登陆场景时&#x…...

Linux shell编程学习笔记58:cat /proc/mem 获取系统内存信息
0 前言 在开展系统安全检查的过程中,除了收集cpu信息,我们还需要收集内存信息。在Linux中,获取内存信息的命令很多,这里我们着重研究 cat /proc/mem命令。 1 cat /proc/mem命令 /proc/meminfo 文件提供了有关系统内存的使用情况…...

【InternLM实战营第二期笔记】07:OpenCompass :是骡子是马,拉出来溜溜
文章目录 课程实操 课程 评测的意义是什么呢?我最近也在想。看到这节开头的内容后忽然有个顿悟:如果大模型最终也会变成一种基础工具(类比软件),稳定或可预期的效果需要先于用户感知构建出来,评测 case 就…...

matlab演示银河系转动动画
代码 function GalaxyRotationSimulation()% 参数设置num_stars 1000; % 恒星数量galaxy_radius 1; % 银河系半径rotation_speed 0.05; % 旋转速度% 生成银河系中的恒星分布theta 2 * pi * rand(num_stars, 1); % 角度r galaxy_radius * sqrt(rand(num_stars, 1)); % 半径…...

备战 清华大学 上机编程考试-冲刺前50%,倒数第5天
T1:多项式求和 小K最近刚刚习得了一种非常酷炫的多项式求和技巧,可以对某几类特殊的多项式进行运算。非常不幸的是,小K发现老师在布置作业时抄错了数据,导致一道题并不能用刚学的方法来解,于是希望你能帮忙写一个程序…...
leetCode127. 单词接龙
leetCode127. 单词接龙 // bfs 剪枝 class Solution { public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {// 1.将所有的单词放在set字段中unordered_set<string> s;for (auto & ele : wordList) s.insert(ele);//…...

进程概念(二)
目录 进程优先级基本概念查看系统进程PRI and NIPRI vs NI修改进程优先级的命令renice修改优先级进程其他概念 环境变量基本概念查看环境变量方法常见环境变量PATHHOMESHELL 查看环境变量环境变量相关的命令 环境变量特征命令行参数main函数中的俩个参数 argc argvmain函数的第…...
java程序100道01—20
1.用循环的嵌套,输出输出如下图形 * * * * * * * * * * * * * * * * * * * * * * * * * package Exercises.One_Hundred; public class Demo01 {public static void main(String[] args) {for(int i1;i<5;i){for(int j1;j<2*i-1;j){Sys…...
让GNSSRTK不再难【第二天-第7部分2】
状态更新计算过程: 计算卡尔曼增益: 根据预测的误差协方差矩阵 P k − P_k^- Pk− 和观测噪声协方差矩阵 R R R 计算卡尔曼增益 K k K_k Kk: K k P k − H T ( H P k − H T R ) − 1 K_k P_k^- H^T (H P_k^- H^T R)^{-1} KkPk…...
计算引擎:Flink核心概念
Apache Flink 是一个流处理框架,擅长处理实时数据流和批处理任务。Flink 提供了强大的功能来处理和分析大量数据。以下是 Flink 的核心概念: 1. DataStream 和 DataSet API DataStream API: 用于处理无界数据流,即不断生成和流动的数据。例如,传感器数据、日志等。DataSet…...

技术前沿 |【大模型InstructBLIP进行指令微调】
大模型InstructBLIP进行指令微调 一、引言二、InstructBLIP模型介绍三、指令微调训练通用视觉语言模型的应用潜力四、InstructBLIP的指令微调训练步骤五、实验结果与讨论六、结论与展望 一、引言 随着人工智能技术的快速发展,视觉语言模型(Vision-Langu…...
CSS-布局-flex
CSS3 新增了弹性盒子模型( Flexible Box 或 FlexBox ),是一种新的用于在 HTML 页面实现布局的方式。使得 HTML 页面适应不同尺寸的屏幕和不同的设备时,元素是可预测地运行。 基本概念 容器:使用 display:flex 或 display:inline-flex 声明的…...
「C系列」C 数组
文章目录 一、C 数组1. 声明数组2. 初始化数组3. 访问数组元素4. 数组越界5. 多维数组 二、C 操作数组的方法有哪些三、C 数组-应用场景1. 存储固定数量的数据2. 实现算法(如排序)3. 处理数据集合 四、相关链接 一、C 数组 在C语言中,数组是…...

Python框架scrapy有什么天赋异禀
Scrapy框架与一般的爬虫代码之间有几个显著的区别,这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点: 结构化与模块化: Scrapy:提供了高度结构化的框架,包括定义好的Spider…...

【ROS2大白话】四、ROS2非常简单的传参方式
系列文章目录 【ROS2大白话】一、ROS2 humble及cartorgrapher安装 【ROS2大白话】二、turtlebot3安装 【ROS2大白话】三、给turtlebot3安装realsense深度相机 【ROS2大白话】四、ROS2非常简单的传参方式 文章目录 系列文章目录前言一、launch文件传参的demo1. 编写launch.py文…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...