Python语法基础---正则表达式

🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”

我们这个文章所讲述的,也是数据分析的基础文章,正则表达式
首先,我们在开始之前,引出一个问题。也是我们接下来想要解决的问题。
那就是,我们应该怎么判断合适的QQ号。
一个合适的QQ号应该包括下面的几个部分:
- 全数字
- 位数 5-11
- 开头不能为0
我们先给大家实现一下这个解决这个问题的代码,稍后再给大家讲解一下其中的原理。
def check_qq(qq):return qq.isdigit() and len(qq) in range(5,12) and not qq.startswith('0')
qq = '91915235'
res = check_qq(qq)
print(res)
这个是用我们之前所熟悉的代码来实现这个功能,这个应该不用太仔细解析,大家可以先好好看看。
我们接下来重点看用正则实现这个功能的部分。
def check_qq(qq):return qq.isdigit() and len(qq) in range(5,12) and not qq.startswith('0')
qq = '919152305'
res = check_qq(qq)
print(res)import re
def check_qq1(qq):r=re.match(r"^[1-9]\d{4,10}$",qq)return True if r else False
if __name__ =='__main__':qq='0543265'r1=check_qq1(qq)print(r1)r2=check_qq(qq)print(r2)
下面的部分就是用正则表达式实现的。其中包含了很多的知识点,这个需要我们慢慢来进行分析。
首先,我们先来看一下结果。
这两个的结果是完全相同的。

单字符匹配
单字符匹配就是说,无论[]里面包含了多少字符,只能匹配其中的一位。
.: 默认情况下,匹配除了换行符以外的任意字符。
match():如果匹配上,则返回match对象,如果未匹配上,则返回None
我们来看一下例子。
import re
r=re.match(r'.','\n')
print(r)
r1=re.match(r'.','5')
print(r1)
这个例子就可以很好的解释我们刚才所看到的。
后期在爬虫中,要爬取网页内容,网页中有大量的换行,则我们需要设置flags=re.DOTALL
r=re.match(r'.','\n',flags=re.DOTALL)
我们再来看下一个例子
import re
r1=re.match(r"[0-9a-zA-Z]","F")
print(r1)
r2=re.match(r"[gbk]","b")
print(r2)
r3=re.match(r"[^gbk]","b")
print(r3)

我们可以看到,第一个和第二个都匹配到了,但是第三个没有,这是因为^只能匹配第一个。第一个不符合,就返回了None
我们来看下一个例子:
import re
r1=re.match(r"[0-9a-zA-Z]","F")
print(r1)
r2=re.match(r"\w","a")
print(r2)r3=re.match(r"\s"," ")
print(r3)
r4=re.match(r"\s","\n")
print(r4)
在这段代码当中,我们可以看到的是,\s无论是空格还是换行符都可以匹配到。
数量词匹配
我们先来看一下示例代码
import re
print(re.match(r'\d\d\d\d',"4567"))
这个就是我们上面所讲到的单字符匹配,一共四个\d,所以可以匹配四个数字
那么,这个有更多的使用方式吗,答案是,有的。
我们来看下面的三种调用方法:
import re
# print(re.match(r'\d\d\d\d',"4567"))
print(re.match(r'\d{4}',"4654"))
print(re.match(r'\d{4,}',"464564654"))
print(re.match(r"\d{4,10}","46545497974564654654645"))
第一种是恰好调用四个,第二个是最少四个,第三个是四个到10个
我们可以来看一下打印出来的结果。

我们再来看下一个例子:
import re
print(re.match(r'a?','aaaaaaaaaaaaaaaa'))
print(re.match(r'a+',''))
print(re.match(r'a*',''))

第一个表示单个字符,第二个表示1个或无数个,最后一个表示0个或无数个
我们再来看下一个例子:
import re
print(re.search(r'a?','aaaaaaaaaaaa'))
print(re.search(r'a+','aaa'))
print(re.search(r'a*','aaaa'))
下面使我们运行出来的结果。

其实search的底层调用的就是match,和match相似的是,调用成功的话,返回调用对象,如果不匹配的话,返回None。
我们再来看一下下一种情况:
import re
print(re.findall(r'a?','aaaaaaaaa'))
print(re.findall(r'a+','aaaaaaaaa'))
print(re.findall(r'a*','aaaaaaaaa'))
下面是我们运行的结果。

findall()在源字符串中从左向右查找,将所有符合条件的子字符串全部查找出来 。
边界匹配
我们来看下一种情况
^和$匹配的是整个字符串的行首或行尾
import re
print(re.findall(r"^this","this is a text\nthis is a text\nthis is a text\n"))
print(re.findall(r"text$","this is a text\nthis is a text\nthis is a text\n"))
我们再来看一下打印出来的结果。

为什么只会打印出来一个呢?
这是因为默认情况下,即使字符串中有换行符,也是默认的单行模式。
我们可以设置在多行模式下面看一下:
import re
print(re.findall(r"^this","this is a text\nthis is a text\nthis is a text\n",flags=re.M))
print(re.findall(r"text$","this is a text\nthis is a text\nthis is a text\n",flags=re.M))
我们在后面加上一个re.M,就变成了单行模式,对应的,结果也会发生变化。

我们也可以搜索多行模式下面的第一个和最后一个,看下面这个代码
import re
print(re.findall(r"\Athis","this is a text\nthis is a text\nthis is a text\n",flags=re.M))
print(re.findall(r"text\Z","this is a text\nthis is a text\nthis is a text",flags=re.M))
在这种情况下,我们搜索到的也是一个

贪婪匹配和非贪婪匹配
?非贪婪匹配
+ * 贪婪匹配
首先,我们来看一下下面这个代码:
import re
print(re.findall(r'a?','aaaaaaaaaaaaa')) #0个或者一个
print(re.findall(r'a+','aaaaaaaaaaaaa')) #一个或者多个
print(re.findall(r'a*','aaaaaaaaaaaaa')) #0个或者多个
这个其实就是我们之前所提到过的贪婪匹配和非贪婪匹配。
更多的非贪婪匹配和贪婪匹配的内容,我们在下一篇文章中说,大家,明天见。

相关文章:
Python语法基础---正则表达式
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们这个文章所讲述的,也是数据分析的基础文章,正则表达式 首先,我们在开始之前,引出一个问题。也是我们接下来想要解决的问题。…...
Uniapp 微信小程序分享 - 自定义绘制分享图片
技术栈: Uniapp Vue3 简介 因实际业务需求,需要实现微信小程序自定义分享,根据当前数据动态生成(绘制)分享卡片的图片。 基础分享使用 配置此处不在赘述,可查看上篇博客:Uniapp 微信小程序分…...
鸿蒙技术分享:Navigation页面容器封装-鸿蒙@fw/router框架源码解析(三)
本文是系列文章,其他文章见:鸿蒙fw/router框架源码解析(一)-router页面管理鸿蒙fw/router框架源码解析(二)-Navigation页面管理鸿蒙fw/router框架源码解析(四)-路由Hvigor插件实现原…...
三步入门Log4J 的使用
本篇基于Maven 的Project项目, 快速演示Log4j 的导入和演示。 第一步: 导入Log4j依赖 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.24.2</version&…...
VBA中类的解读及应用第十八讲:利用类方法,判断任意单元格类型
《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入࿰…...
查询品牌涉及两张表(brand、brand_admin_mapping)
文章目录 1、BrandController2、AdminCommonService3、BrandApiService3、BrandCommonService4、BrandSqlService涉及的表SQL 查询逻辑参数处理执行查询完整 SQL 逻辑参数映射总结 查询指定管理员下的品牌所涉及的表有哪些? http://127.0.0.1:8087/brand/admin/list…...
Eureka和Zookeeper、Nacos的区别
目录 一、Eureka与Zookeeper的区别 适用场景: 架构设计: 功能特性: 社区生态: 二、Eureka与Nacos的区别 接口方式: 实例类型: 健康检测: 服务发现: 一致性与可用性&#…...
微信小程序怎么实现非tabbar页面显示tabbar,自定义组件实现
微信小程序没有发现可以实现非tabbar页面显示tabbar的方法,但是可以在tabbar页面当中隐藏tabbar,使用wx.hideTabBar()方法就可以实现,在非tabbar页面调用wx.showTabBar()方法却会显示失败,不能显示tabbar onLoad() {wx.showTabBar…...
SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)
前言 前面给大家介绍了动态表头的导入,这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入,我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次,我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…...
多种平台上安装部署调试Open5GS(四)
OpenWRT 源码安装 UERANSIM 安装依赖openwrt源码安装cmake其他依赖准备UERANSIM安装测试验证Open5GS 是一个功能完善的开源5G项目,具备5G、4G核心网功能,最新代码支持R17标准, 本系列文章介绍Open5GS在x86、ARM平台上的安装部署方法,并通过搭建UERANSIN、商用5G基站和终端两…...
单片机的基本构成与工作原理
单片机,即微控制器(Microcontroller Unit,MCU),是一种将中央处理器(CPU)、存储器(ROM/RAM)、定时/计数器(Timer/Counter)、中断系统、输入输出(I/O)接口等集成在一块芯片上的微型计算机。它具有体积小、功耗低、成本低…...
opencv常用图像处理操作
OpenCV 处理图像的通用流程通常包括以下几个步骤,根据具体需求可以调整或跳过某些步骤。以下是一个通用的框架: 读取图像 加载图像文件到内存中以进行后续处理。 import cv2 读取图像 image cv2.imread(‘image.jpg’) # 彩色图像 gray_image cv2…...
Svn如何切换删除账号
记录Svn清除切换账号 1.首先打开小乌龟的设置如下图 打开设置后单击已保存数据,然后选择清除 接上图选择清除后,就可以打勾选择清除已保存的账号,我们再次检出的就可以切换账号了 👉总结 本次记录Svn清除切换账号 如能帮助到你…...
使用PaddleOCR遇到的问题Bug
Q1: 训练模型的预测效果比inference模型的预测效果差距很大,怎么办?原因是什么? A1: 训练模型:使用训练数据集进行训练后的模型。 inference模型:把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。训练过程中保存的模型是checkpoints模型,保存的只有模…...
了解Xcode在iOS开发中的作用和功能有哪些
Xcode是什么?它在iOS开发中的作用和功能有哪些? 一、Xcode是什么? Xcode是苹果公司针对macOS平台开发的一款集成开发环境(Integrated Development Environment,简称IDE)。它主要用于开发iOS、iPadOS、mac…...
《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答 问:《船舶物资与市场》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《船舶物资与市场》级别? 答:国家级。主管单位:中国船舶集团有限公司 主办单…...
商汤完成组织架构调整,改革完成的商汤未来何在?
首先,从核心业务的角度来看,商汤科技通过新架构明确了以AI云、通用视觉模型等为核心业务的战略方向。这一举措有助于商汤科技集中资源,加强在核心业务领域的研发和市场拓展,提高市场竞争力。同时,坚定生成式AI为代表的…...
MyBatis异常体系中ErrorContext和ExceptionFactory原理分析
🎮 作者主页:点击 🎁 完整专栏和代码:点击 🏡 博客主页:点击 文章目录 exceptions包分包设计ExceptionFactory类介绍为什么使用工厂不是直接new呢?【统一的异常处理机制】【异常的封装与转化】【…...
WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路
2024年11月30日下午,由 deepin(深度)社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG(武汉Linux用户组)线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…...
通过HTML Canvas 在图片上绘制文字
目录 前言 一、HTML Canvas 简介 二、准备工作 三、绘制图片 四、绘制文字 五、完整代码 效果演示: 前言 HTML canvas 为我们提供了无限的创意可能性。今天,我们就来探索一下如何通过 HTML canvas 将图片和文字绘制到图片上,创造出独特…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
