丘一丘正则表达式

正则表达式(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 发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 模拟shell

💓博主CSDN主页:麻辣韭菜-CSDN博客💓   ⏩专栏分类:http://t.csdnimg.cn/G90eI⏪   🚚代码仓库:Linux: Linux日常代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝&#x1f5…

前端JavaScript篇之常见事件

目录 JavaScript常见事件click(点击)mouseover(鼠标悬停)keydown(按键按下)load(加载)submit(提交) JavaScript常见事件 JavaScript中的事件是指用户与网页元…

剑指offer C ++双栈实现队列

1. 基础 队列:先进先出,即插入数据在队尾进行,删除数据在队头进行; 栈:后进先出,即插入与删除数据均在栈顶进行。 2. 思路 两个栈实现一个队列的思想:用pushStack栈作为push数据的栈&#xff…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑碳捕集机组与氢储能系统协调运行的源荷储低碳经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

ansible-playbook的角色(role)

1前言 角色目录如下(分别为httpd角色和nginx角色) handlers/ :至少应该包含一个名为 main.yml 的文件; 其它的文件需要在此文件中通过include 进行包含 vars/ :定义变量,至少应该包含一个名为 main.yml 的…

React Hooks 那些事儿

翻了波之前写的文章还有笔记,发现关于前端的文章并不多(好歹也划水做过点前端开发)。巧了,最近没什么好话题可写,做下 React Hooks 学习笔记吧。 Effect Hook 不得不说 Hook 的出现降低了我们在 React 中处理副作用&…

极简云商业版 开源源码

简化版的云商业源码已经以开源形式发布了,现在可以解绑卡密和查询卡密。总体而言,这个版本已经相当完善了。在对接示例网盘中有一个用户注册的例子,需要配置一个邮箱。您可以在网页上启用QQ邮箱的标准版SMTP,并生成一个授权码。 …

【Spring】学习Spring框架那点小事儿

Spring作者:Rod Johnson Rod Johnson 是一位软件开发人员和作家,他在软件开发领域有着广泛的影响力。他出生于澳大利亚,拥有计算机科学和音乐双学位(能写出有优雅的代码一定有艺术细胞)。 Rod Johnson 在 2002 年出版…

保研复习数据结构记(7)--散列查找(哈希表)

哈希表有什么特点?数据元素的关键字与其存储地址直接相关(通过哈希函数相关),典型的用空间换时间的算法处理冲突的方法?拉链法(链地址法),开放定址法,再散列法什么是查找…

2024年G3锅炉水处理证模拟考试题库及G3锅炉水处理理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理证模拟考试题库及G3锅炉水处理理论考试试题是由安全生产模拟考试一点通提供,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新版教材,G3锅炉水处理大纲整理而成&#xff0…

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt 1. 模型权重准备2. 模型重新参数化2.1 文件准备2.2 参数修改2.3 重新参数化过程 3. 重新参数化后模型推理3.1 推理超参数配置3.2 模型推理及对比 4. onnx 模型导出(补充内容)4…

在WSL2中安装多个Ubuntu教程

文章目录 前言一、前期准备1、WSL安装2、Docker安装 二、安装第二个Ubuntu系统1.切换为WSL22.获取Ubuntu16.04的tar文件从容器中导出tar 3. 将tar文件导入WSL4. 设置默认用户 总结 前言 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Wind…

指针篇章-(5)+最终思维导图

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

03_渲染进程调用node

我们先创建一个文件夹及文件,并且在 html 引入 JS 文件。 在 render.js 里面输入以下内容: let fs require(fs) // let是在当前代码块有效console.log(fs) // 将fs对象的内容打印到控制台供调试和查看 fs 模块:对文件系统进行操作&#xf…

七月论文审稿GPT第3.1版和第3.2版:通过paper-review数据集分别微调Mistral、gemma

前言 我司第二项目组一直在迭代论文审稿GPT(对应的第二项目组成员除我之外,包括:阿荀、阿李、鸿飞、文弱等人),比如 七月论文审稿GPT第1版:通过3万多篇paper和10多万的review数据微调RWKV七月论文审稿GPT第2版:用一万…

使用Flask快速搭建轻量级Web应用【第127篇—Flask】

使用Flask快速搭建轻量级Web应用 在Web开发领域,选择适合项目需求的框架至关重要。Flask,一个轻量级的Python Web框架,以其简洁、灵活和易扩展的特性而备受开发者青睐。本文将介绍如何使用Flask迅速搭建一个轻量级的Web应用,并通过…

FreeRTOS学习笔记-基于stm32(5)列表和列表项

一、列表与列表项简介 列表是FreeRTOS中的一种数据结构,类似双向循环链表。用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目。 二、列表 列表结构体: typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE //校验值c…

Unity 显示MeshRenderer的渲染层级

Unity 显示MeshRenderer的渲染层级 前言源码MeshRendererInspectorSkinnedMeshRendererInspector 参考 前言 Mesh Renderer和Skinned Mesh Renderer组件默认不显示Order,找了个工具显示一下。 源码 下面两个代码放入Editor文件夹中 MeshRendererInspector Me…

ChatGPT Prompt 的原理总结

ChatGPT Prompt 的原理总结 ChatGPT Prompt 是 OpenAI 开发的大型语言模型 ChatGPT 的一种使用方式。通过 Prompt,用户可以引导 ChatGPT 生成特定内容,例如回答问题、写故事、写代码等等。 Prompt 的原理 Prompt 本质上是一段文本,它告诉 C…

人工智能在增强数据安全方面的作用

近年来,人工智能(AI)的力量已被证明是无与伦比的。它不再是我们想象的主题。人工智能已经成为现实,并且越来越清楚地表明它可以让世界变得更美好。但人工智能能帮助我们增强数据安全吗? 由于技术的日益普及&#xff0…