丘一丘正则表达式

正则表达式(regular expression,regex,RE)

  • 正则表达式是一种用来简洁表达一组字符串的表达式
  • 正则表达式是一种通用的字符串表达框架
  • 正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具
  • 正则表达式可以用来判断某字符串的特征归属

正则表达式常用操作符

操作符说明实例
.表示任意单个字符py. 可以匹配pyc,pyy,py!等等
[ ]字符集,对单个字符给出取值范围[abc]可以匹配a或b或c;[0-9a-zA-z\_]可以匹配一个数字、一个字母或者一个下划线
[^ ]非字符集,对单个字符给出排除范围[^abc]可以匹配非a或非b或非c的单个字符
*前一个字符0次或多次扩展abc* 可以匹配ab、abc、abcc、abccc等等
+前一个字符的1次或多次扩展abc+可以匹配abc、abcc、abccc等等
?前一个字符0次或1次扩展abc?可以匹配ab、abc
|左右表达式任意一个abc|def表示abc、def
{m}扩展前一个字符m次ab{2}c匹配abbc
{m,n}扩展前一个字符m至n次数(含n)ab{1,2}c可以匹配abc、abbc
^匹配字符串开头^abc表示abc且在一个字符串的开头,^\d表示必须以数字开头
$匹配字符串结尾abc表示abc且在一个字符串的结尾、\d$白哦是必须以数字结尾
( )分组标记,内部只能使用|操作符(abc|def)表示abc、def
\d可以匹配一个数字,相当于[0-9]\d{3}表示匹配3个数字,如010
\w可以匹配一个字母或者数字或者下划线,相当于[a-zA-Z0-9_]\w\w\d可以匹配'py3'
\s可以匹配一个空格(也包括Tab等空白字符)\s+表示至少有一个空格,如' '、' '

精确匹配

在正则表达式中,如果直接给出字符,就是精确匹配

  • 'pyt' 匹配'pyt'
  • '00\d' 可以匹配'007'
  • '\w\d' 可以匹配'!5'
  • 'ye.' 可以匹配'yes'
  • '(P|p)python' 可以匹配'Python'、'python'

高阶精确匹配,经典实例

  • ^[A-Za-z]+$ 匹配由26个英文字母组成的字符串,如'abrg'、'abgsfsfga'
  • [a-zA-Z\_][0-9a-zA-Z\_]* 可以匹配由字母或者下划线开头、后接任意一个由字母、数字或者下划线组成的字符串,也就是python的合法变量
  • ^-?\d+$ 匹配整数形式的字符串
  • ^[0-9][1-9][0-9]$ 匹配正整数形式的字符串
  • [1-9]\d{5} 中国境内邮政编码,6位
  • [\u4e00-\u9fa5] 匹配中文字符
  • \d{3}-\d{8}|\d{4}-\d{7} 国内电话号码,010-68913536

python正则表达式模块,(Re模块)

  • re是python的标准库,主要用于字符串匹配
  • re库采用raw string类型(原生字符串类型)表示正则表达式,例如r'[1-9]\d{5}',raw string是不包含对转义符再次转义的字符串
  • re库也可以采用string类型表示正则表达,但是较为繁琐,例如'[1-9]\\d{5}'

re库功能函数

函数说明
re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match()从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()搜索字符串,以列表类型返回全部能匹配的子串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub()在字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
1. re.search(pattern,string,flags=0)

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags: 正则表达式使用时的控制标记

常用标记说明
re.I re.IGNORECASE忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE正则表达式中的^操作符能够将给定字符串的每行当做匹配开始
re.s re.DOTALL正则表达式中的.操作符能够匹配所有字符串,默认匹配除换行外的所有字符串
2. re.match(pattern,string,flags=0)

从一个字符串的开始位置起匹配正则表达式,返回match对象

  • pattern:正则表达式的字符串或者原生字符串表示
  • string:待匹配字符串
  • flags:正则表达式使用时的控制标记

3. re.findall(pattern,string,flags=0)

搜索字符串,以列表类型返回全部能匹配的字符串

4. re.split(pattern,string,maxsplit=0,flags=0)

将一个字符串按照正则匹配结果进行分割,返回列表类型

  • maxsplt:最大分割数,剩余部分作为最后一个元素输出

5. re.finditer(pattern,string,flags=0)

搜索字符串,返回一个匹配结果的迭代类型,每个迭代类型是match对象

6. re.sub(pattern,repl,string,cout=0,flags=0)

在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

  • repl:替换匹配字符串的字符串
  • cout:匹配的最大替换次数

re库的面向对象用法

在python中使用正则表达式的时候,re模块内部会做两件事:

  1. 编译正则表达式,如果正则表达式本身不合法,会报错

  2. 用编译后的正则表达式去匹配字符串

    regex = re.compile(pattern,flags=0) 将正则表达式的字符串形式编译成正则表达式对象

  • pattern:正则表达式的字符串或原生字符串表示
  • flags:正则表达式使用时的控制标记

compile后生成了regular expression对象,由于该1对象包含了正则表达式,所以调用对应的方法不用给出正则字符串

re库的Match对象

  • Match对象是一次匹配的结果,包含很多信息

Match对象的属性

属性说明
.string待匹配的文本
.re匹配使用的pattern对象(正则表达式)
.pos正则表达式搜索文本的开始位置
.endpos正则表达式搜索文本的结束位置

Match对象的方法

方法说明
.group(0)获得匹配后的字符串
.start()匹配字符串在原始字符串的开始位置
.end()匹配字符串在原始字符串的结束位置
.span()返回(.start(),.end())一个元组

re库的贪婪匹配和最小匹配

re库默认使用贪婪匹配,即匹配最长的子串

最小匹配

** 最小匹配操作符 **

操作符说明
*?前一个字符0次或者无限次扩展,最小匹配
+?前一个字符1次或者无限次扩展,最小匹配
??前一个字符0次或1次扩展,最小匹配
{m,n}?扩展前一个字符m至n次(包含n),最小匹配

只要输出长度可能不同的,都可以通过在操作符后面加?变成最小匹配

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000


本文由博客群发一文多发等运营工具平台 OpenWrite 发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)

搜索框组件,适用于浏览器的搜索内容输入框等应用场景。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Search(options?: { value?: string, placeholder?: Reso…

webpack5高级--02_提升打包构建速度

提升打包构建速度 一、HotModuleReplacement 为什么 开发时我们修改了其中一个模块代码,Webpack 默认会将所有模块全部重新打包编译,速度很慢。 所以我们需要做到修改某个模块代码,就只有这个模块代码需要重新打包编译,其他模…

混合云构建-VPN打通阿里云和Azure云

要在阿里云和Azure云之间通过VPN打通网络,您需要在两边分别设置VPN网关,并配置相应的连接和路由规则以确保两个云环境之间的网络流量可以互通。以下是一个基本的步骤指南: 为了更具体地说明如何在阿里云和Azure之间通过VPN打通网络,我们将通过一个简化的示例来演示整个过程…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28(最新版)离线部署

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28(最新版)SDK离线部署 测试资源4.18 以及之前版本4.19 以及之后版本 接触一段时间 ArcGIS JSAPI 之后,整体感觉还好,后来需要解决不同版本问题&#xff0…

redis中通用命令以及key过期策略

通用命令 exists 判断某个key是否存在。 exists key时间复杂度:O(1) 返回值:key 存在的个数。 del 删除指定的 key,可以一次删除一个或者多个。 del key时间复杂度:O(1) 返回值:删除掉的 key 的个数。 expire…

数据结构·复杂度

目录 1 时间复杂度 2 大O渐进表示法 举例子(计算时间复杂度为多少) 3 空间复杂度 前言:复杂度分为时间复杂度和空间复杂度,两者是不同维度的,所以比较不会放在一起比较,但是时间复杂度和空间复杂度是用…

汉服|高校汉服租赁网站|基于Springboot的高校汉服租赁网站设计与实现(源码+数据库+文档)

高校汉服租赁网站目录 目录 基于Springboot的高校汉服租赁网站设计与实现 一、前言 二、系统设计 三、系统功能设计 1、汉服信息管理 2、汉服租赁管理 3、公告管理 4、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

22.1 线程安全及性能:ThreadLocal(❤❤)

22.1 分布式_ThreadLocal 1. 简介1.1 使用场景2. ThreadLocal实现线程独享对象2.1 基于SimpleDateFormat讲解ThreadLocal优势1. 2个线程分别使用SimpleDateFormat对象2. 10个线程甚至更多使用SimpleDateFormat对象3. 基于线程池使用SimpleDateFormat对象4. 优化SimpleDateForma…

GPT实战系列-构建多参数的自定义LangChain工具

GPT实战系列-构建多参数的自定义LangChain工具 LangChain系列 GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简…

SQL Server错误:15404

执行维护计划失败,提示SQL Server Error 15404 无法获取有关... 异常如下图: 原因:数据库用户名与计算机名称不一致 解决办法:1.重名称数据库用户名 将前缀改成计算机名 2.重启SQL Server代理

【数据挖掘】实验1:R入门(内含详细R和RStudio安装教程)

实验1:R入门 一:实验目的与要求 1:根据上课PPT内容,掌握课堂知识并进行代码练习操作,提供练习过程和结果。 2:可COPY代码运行结果直接提交,如涉及到输出图等可截图。 二:实验内容 …

免费搭建导航网站教程带免费空间域名源码

使用免费空间和免费域名免费搭建一个导航网站 手把手视频教程 https://pan.xunlei.com/s/VNsoMehs7RCjz3IClV6h2vNMA1?pwdq596#

中国首个基于区块链的分布式算力网络上线

随着美国人工智能公司OpenAI近期发布的Sora视频模型,全球对高性能算力的需求突破了历史新高。Sora的创新在于它能够以超长生成时间、多角度镜头捕捉,理解物理世界的能力,这不仅是技术的一大突破,更是对算力需求的一大挑战。在这样…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”,意味着您没有足够的权限来执行某个操作。在计算机领域,尤其是在文件系统和程序安装中,这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法: 文件系统权限:当您尝试…

【开源】SpringBoot框架开发智慧社区业务综合平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

【机器学习300问】34、决策树对于数值型特征如果确定阈值?

还是用之前的猫狗二分类任务举例(这个例子出现在【机器学习300问】第33问中),我们新增一个数值型特征(体重),下表是数据集的详情。如果想了解更多决策树的知识可以看看我之前的两篇文章: 【机器…

按键+串口发送实验

摸鱼记录 Day_15 ~( ̄▽ ̄~)(~ ̄▽ ̄)~ review 前边已经学习了: 串口发送Vivado 串口通信(UART)------串口发送-CSDN博客 按键基于状态机的按键消抖实现-CSDN博客 1. …

STM32外设分类--学习笔记

简介: 本文在于根据自己的理解,将stm32f103外设按照功能分个类别,便于记忆。下面的几张图一定要熟悉,后期编写代码时能够快速找到想要的功能和对应的引脚。 我使用的工具链是:使用CubeMX完成keil5工程搭建和引脚初始化功能,然后用…

Grafana

介绍 官网:https://grafana.com/ Grafana 是一个开源的指标分析和可视化工具,它被广泛用于展示和监控云基础设施和应用程序的实时数据。Grafana 提供了一个强大且易于使用的界面,允许用户创建各种图表、图形和仪表盘,以直观地展…

探索HDFS读写流程、节点机制和数据完整性

目录 写在前面一、HDFS的读写流程1.1 HDFS写数据流程1.2 机架感知1.3 HDFS读数据流程1.4 小结 二、 NameNode和SecondaryNameNode2.1 NN和2NN工作机制2.2 Fsimage和Edits解析2.2.1 oiv查看Fsimage文件2.2.2 oev查看Edits文件 2.3 CheckPoint时间设置 三、DataNode3.1 DataNode工…