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

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

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

我们这个文章所讲述的,也是数据分析的基础文章,正则表达式

首先,我们在开始之前,引出一个问题。也是我们接下来想要解决的问题。

那就是,我们应该怎么判断合适的QQ号。

一个合适的QQ号应该包括下面的几个部分:

  1. 全数字
  2. 位数 5-11
  3. 开头不能为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项目&#xff0c; 快速演示Log4j 的导入和演示。 第一步&#xff1a; 导入Log4j依赖 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.24.2</version&…...

VBA中类的解读及应用第十八讲:利用类方法,判断任意单元格类型

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…...

查询品牌涉及两张表(brand、brand_admin_mapping)

文章目录 1、BrandController2、AdminCommonService3、BrandApiService3、BrandCommonService4、BrandSqlService涉及的表SQL 查询逻辑参数处理执行查询完整 SQL 逻辑参数映射总结 查询指定管理员下的品牌所涉及的表有哪些&#xff1f; http://127.0.0.1:8087/brand/admin/list…...

Eureka和Zookeeper、Nacos的区别

目录 一、Eureka与Zookeeper的区别 适用场景&#xff1a; 架构设计&#xff1a; 功能特性&#xff1a; 社区生态&#xff1a; 二、Eureka与Nacos的区别 接口方式&#xff1a; 实例类型&#xff1a; 健康检测&#xff1a; 服务发现&#xff1a; 一致性与可用性&#…...

微信小程序怎么实现非tabbar页面显示tabbar,自定义组件实现

微信小程序没有发现可以实现非tabbar页面显示tabbar的方法&#xff0c;但是可以在tabbar页面当中隐藏tabbar&#xff0c;使用wx.hideTabBar()方法就可以实现&#xff0c;在非tabbar页面调用wx.showTabBar()方法却会显示失败&#xff0c;不能显示tabbar onLoad() {wx.showTabBar…...

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言 前面给大家介绍了动态表头的导入&#xff0c;这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入&#xff0c;我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次&#xff0c;我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…...

多种平台上安装部署调试Open5GS(四)

OpenWRT 源码安装 UERANSIM 安装依赖openwrt源码安装cmake其他依赖准备UERANSIM安装测试验证Open5GS 是一个功能完善的开源5G项目,具备5G、4G核心网功能,最新代码支持R17标准, 本系列文章介绍Open5GS在x86、ARM平台上的安装部署方法,并通过搭建UERANSIN、商用5G基站和终端两…...

单片机的基本构成与工作原理

单片机&#xff0c;即微控制器&#xff08;Microcontroller Unit&#xff0c;MCU&#xff09;&#xff0c;是一种将中央处理器(CPU)、存储器(ROM/RAM)、定时/计数器(Timer/Counter)、中断系统、输入输出(I/O)接口等集成在一块芯片上的微型计算机。它具有体积小、功耗低、成本低…...

opencv常用图像处理操作

OpenCV 处理图像的通用流程通常包括以下几个步骤&#xff0c;根据具体需求可以调整或跳过某些步骤。以下是一个通用的框架&#xff1a; 读取图像 加载图像文件到内存中以进行后续处理。 import cv2 读取图像 image cv2.imread(‘image.jpg’) # 彩色图像 gray_image cv2…...

Svn如何切换删除账号

记录Svn清除切换账号 1.首先打开小乌龟的设置如下图 打开设置后单击已保存数据&#xff0c;然后选择清除 接上图选择清除后&#xff0c;就可以打勾选择清除已保存的账号&#xff0c;我们再次检出的就可以切换账号了 &#x1f449;总结 本次记录Svn清除切换账号 如能帮助到你…...

使用PaddleOCR遇到的问题Bug

Q1: 训练模型的预测效果比inference模型的预测效果差距很大,怎么办?原因是什么? A1: 训练模型:使用训练数据集进行训练后的模型。 inference模型:把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。训练过程中保存的模型是checkpoints模型,保存的只有模…...

了解Xcode在iOS开发中的作用和功能有哪些

Xcode是什么&#xff1f;它在iOS开发中的作用和功能有哪些&#xff1f; 一、Xcode是什么&#xff1f; Xcode是苹果公司针对macOS平台开发的一款集成开发环境&#xff08;Integrated Development Environment&#xff0c;简称IDE&#xff09;。它主要用于开发iOS、iPadOS、mac…...

《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《船舶物资与市场》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《船舶物资与市场》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国船舶集团有限公司 主办单…...

商汤完成组织架构调整,改革完成的商汤未来何在?

首先&#xff0c;从核心业务的角度来看&#xff0c;商汤科技通过新架构明确了以AI云、通用视觉模型等为核心业务的战略方向。这一举措有助于商汤科技集中资源&#xff0c;加强在核心业务领域的研发和市场拓展&#xff0c;提高市场竞争力。同时&#xff0c;坚定生成式AI为代表的…...

MyBatis异常体系中ErrorContext和ExceptionFactory原理分析

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 exceptions包分包设计ExceptionFactory类介绍为什么使用工厂不是直接new呢&#xff1f;【统一的异常处理机制】【异常的封装与转化】【…...

WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路

2024年11月30日下午&#xff0c;由 deepin&#xff08;深度&#xff09;社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG&#xff08;武汉Linux用户组&#xff09;线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…...

通过HTML Canvas 在图片上绘制文字

目录 前言 一、HTML Canvas 简介 二、准备工作 三、绘制图片 四、绘制文字 五、完整代码 效果演示&#xff1a; 前言 HTML canvas 为我们提供了无限的创意可能性。今天&#xff0c;我们就来探索一下如何通过 HTML canvas 将图片和文字绘制到图片上&#xff0c;创造出独特…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...