丘一丘正则表达式

news2024/11/25 14:52:00

正则表达式(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.coloradmin.cn/o/1512002.html

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

相关文章

[vscode]将命令行参数传递给调试目标

一、简介 本文介绍了在vscode中使用cmake工具时,如何传递参数给编译目标的方法。 前提:使用vscodecmake编译C/C程序。 二、方法 在.vscode/目录下新建settings.json文件,并将待传底的参数写在 cmake.debugConfig里。 下面介绍了一个示例&a…

DAY14二叉树迭代遍历

二叉树前序迭代法遍历 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。 为什么要先加入 右孩子,再加入左孩子呢? 因为这样出栈的时候才是中左右的顺…

Stable Diffusion 如何写好提示词(Prompt)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文深入探讨了如何撰写出优质的提示词,内容涵盖多个维度:提示词的多样化分类、模型应用中的经典提示词案例、提供丰富资源的提示词参考…

基于STM32的智慧农业管理系统设计与实现

文章目录 一、前言1.1 项目介绍【1】项目功能【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 传感器功能介绍1.4 开发工具的选择 二、EMQX开源MQTT服务器框架三、购买ECS云服务器3.1 登录官网3.2 购买ECS服务器3.3 配置安全组3.4 安装FinalShell3.5 远程登录到云服…

Java代码审计工程师直播第六期

本期直播课程将深入探讨Java代码审计的关键概念和技术。涵盖课题包括安全漏洞分析、代码审查方法、常见漏洞案例分析等。学员将通过实例掌握代码审计实战技能,提升对Java应用程序安全的认知和技能水平。 课程大小:6.1G 课程下载:https://do…

Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 三要素

镜像、容器、镜像仓库是 Docker 中最核心的三个概念,组成了 Docker 的整个生命周期。 (镜像、容器、镜像仓库三者运行关系) 1、镜像 镜像是 Docker 的核心元素质疑,作为容器运行的基础,Docker Hub 官网提供了庞大的镜…

第十五届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组(被题目描述坑惨了)

目录 1.创意广告牌 2.原子化css 3.神秘咒语 4.朋友圈 5.美食蛋白揭秘 6.营业状态变更 7.小说阅读器 8.冰岛人 9.这是一个”浏览器“ 10.趣味加密解密 总结 1.创意广告牌 这个题目不多说了,只要知道这些css应该都能写出来,不会的平时多查查文…

突破界限的力量:探索Facebook如何打破国界、文化和语言的障碍

在当今全球化的时代,社交媒体已经成为人们生活中不可或缺的一部分,而Facebook作为其中的先驱者,更是在打破国界、文化和语言障碍方面发挥着举足轻重的作用。它不仅成为了人们交流、连接的重要平台,更是为不同国家、不同文化、不同…

固态存储是未来|浅析SSD架构的演进与创新技术-1

常见的SSD架构中,包括了SSD控制器、NAND颗粒、DRAM颗粒三大组件,SSD控制器的固件需要兼顾坏块管理、ECC纠错、垃圾回收GC、磨损均衡WL、NAND die介质管理、缓存交互等等。 随着时代的发展,SSD架构,也不断有新的挑战和需求。基于小…

抓取Instagram数据:Fizzler库带您进入C#爬虫程序的世界

引言 在当今数字化的世界中,数据是无价之宝。社交媒体平台如Instagram成为了用户分享照片、视频和故事的热门场所。作为开发人员,我们可以利用爬虫技术来抓取这些平台上的数据,进行分析、挖掘和应用。本文将介绍如何使用C#编写一个简单的Ins…

一条 sql 语句可能导致的表锁和行锁以及死锁检测

锁 MDL 当对一个表做增删改查操作的时候,加 MDL 读锁;当要对表做结构变更操作的时候,加 MDL 写锁 ALTER TABLE tbl_name NOWAIT add column ... ALTER TABLE tbl_name WAIT N add column ... …

小程序bindtap 和 catchtap 的区别以及如何使用

Hello大家好!我是咕噜铁蛋!我今天要和大家聊一聊小程序开发中的一个常见问题:bindtap 和 catchtap 的区别以及如何使用。这两个在小程序开发中经常被提及的事件绑定方式,它们之间到底有什么不同呢?让我们一起来深入探讨…

Prometheus监控Mysql数据库在Grafana展示

未安装prometheus和Grafana可以参考这个博客操作 Docker安装Prometheus监控-CSDN博客 Windows版本数据库 一、在数据库服务器安装mysqld-exporter 下载mysqld-exporter文件 Releases prometheus/mysqld_exporter GitHub 二、配置mysqld-exporter文件 1、解压进入mysqld…

微服务架构中的拆分粒度决策

大家好!今天我来和大家分享一下微服务架构中的拆分粒度决策问题,希望能帮助大家更好地理解和应用微服务架构! 问题背景 在设计和实施微服务架构时,拆分粒度的决策非常重要。拆分得太细,会增加系统间通信和部署的复杂性…

基于Springboot的驾校预约学习系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的驾校预约学习系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

12、设计模式之代理模式(Proxy)

一、什么是代理模式 代理模式属于结构型设计模式。为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 二、分类 代理模式分为三类&#…

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码

Go——下划线

"_"是特殊标识符,用来忽略结果。 1. 下划线在import中 在golang中,import的作用是导入其他package。 import下划线的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候…

Spring Boot如何自定义自己的Starter组件?

一、为什么要自定义starter 在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的 包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一 遍…

SQLiteC/C++接口详细介绍之sqlite3类(三)

上一篇:SQLiteC/C接口详细介绍之sqlite3类(二) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(四) 6.sqlite3_create_module与sqlite3_create_module_v2函数 用于创建自定义SQLite模块。创建自定义模块可以让S…