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

Python语法之正则表达式详解以及re模块中的常用函数

正则表达式详解及re模块中的常用函数

概念、作用和步骤


概念: 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串【正则表达式】去处理其他的字符串,比如可以对其他字符串进行匹配,切分,查找,替换等一系列操作。
作用:可以对其他字符串进行匹配,切分,查找,替换等处理操作。
编写的步骤:- 需要大量的文本信息——找规律——使用正则语法编写出正则表达式

是一个独立于任何一门语言的技术,任何一门语言中都可以使用同一个正则表达式去操作

语法


需要先导入内置函数re,import re

  • 字符串本身就是一个正则表达式
  • [] 表示可选项

代码展示:

import re
s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个快递能找到'
r1 = re.findall(r'\d+[16]',s1)
print(r1,type(r1))

运行结果:

在这里插入图片描述

  • 英文字母范围
    • [a-z] 表示查找 a-z
    • [A-Za-z]
    • [0-9]

注意[]需要用’ '括起才能使用,否则报错
[**A-Za-z]不能改变如[A-z]因为使用的是ASCII码,会出现非英文部分。

代码展示:

s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'[f-z]',s1)
r2 = re.findall(r'[A-Za-z]',s1)
r3 = re.findall(r'[3-9]',s1)
print(r1)
print(r2)
print(r3)

运行结果:
在这里插入图片描述

  • \d 数字
    • **\d?**表示出现了0次或者1次
    • \d+ 表示出现了1次或者n次
    • \d*表示出现了0次或者n次

    \d同时需’'括起使用

代码展示:

s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'\d',s1)
r4 = re.findall(r'\d?',s1)
r2 = re.findall(r'\d+',s1)
r3 = re.findall(r'\d*',s1)
print(r1)
print(r4)
print(r2)
print(r3)

运行结果:
在这里插入图片描述

  • {}出现次数
    • {m,n} 表示出现的次数范围,m表示至少出现的次数,n表述最多出现的次数
    • {m,} 表示出现的次数,至少为m个,上不封顶
    • {m} 表示出现了m次

代码展示:

s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是微信2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'1\d{1,2}',s1)
r2 = re.findall(r'是\d{,2}',s1)
r4 = re.findall(r'1\d{3,}',s1)
r3 = re.findall(r'\d{2}',s1)
print(r1)
print(r2)
print(r4)
print(r3)

运行结果:
在这里插入图片描述

  • \w 表示英文字母大写或者小写,或者下划线,或者是中文汉字
  • \W 表示除了大小写英文字母,数字,汉字,下划线之外,都能匹配

如果我们没有写re.ASCII参数,那么第一个\w+会将汉字也匹配上,因为\w本身就可以匹配汉字的,但是当我们加上了re.ASCII参数,python正则表达式匹配的时候,\w只会匹配ASCII码上有的字符。

代码展示:

s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是微信2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'\W',s1)
r2 = re.findall(r'qq\w+',s1)
r3 = re.findall(r'qq\w+',s1,re.ASCII)
print(r1)
print(r2)
print(r3)

运行结果:
在这里插入图片描述

  • 匹配以某个字符串开头

    • ^ 表示以某个字符串开头

.com在re里可写成\.com

代码展示:

s1 = '今天是个好天气,我的快递1-67,12-21343,ert_134找不到了,手机号码是12345685769,微信是wx2342345,qq是qq1234,邮箱是12345678@qq.com和12134.163.com。希望我的三个ABC快递能找到'
r1 = re.findall(r'qq\w+',s1,re.ASCII)
r2 = re.findall(r'12\w+\@\w+\.com',s1,re.ASCII)
s2 = '123ajdhsa2134'
s3 = 'ajdhsa$2134$'
r3 = re.findall(r'^aj',s2,re.ASCII)
r4 = re.findall(r'^aj',s3,re.ASCII)
print(r1)
print(r2)
print(r3)
print(r4)

运行结果:
在这里插入图片描述

  • () 分组

可以
多个()进行分组,,结果按()顺序
代码展示:

s1 = '身份证号:342300200105198866'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1,re.ASCII)
print(r1)
for i in r1:print(i)

运行结果:
在这里插入图片描述

  • 或 | 多个字符之间的或使用小括号

代码展示:

s1 = '身份证号1:342300200105198866,另一个身份证号2:342200200806116688'
r1 = re.findall(r'(342\d{3}(\d{4})(\d{4}))',s1)
r2 = re.findall(r'(342(300|200)(\d{4})(\d{2})(\d{2}))',s1)
print(r1)
print(r2)

运行结果:
在这里插入图片描述

  • . 表示任意字符

使用\转义字符,将.变成普通的点字符进行匹配

代码展示:

s1 = '今天天气正好,适合买xiaomipro,邮箱是12345678@qq.com'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.findall(r'天气.{5}',s1)
r3 = re.findall(r'12\d+@+\w+\.com',s1)print(r1)
print(r2)
print(r3)

运行结果:
在这里插入图片描述

re模块中的常用函数


  • re.findall 在大字符串中查找符合正则表达式特点的式子
  • re.match() 匹配整个字符串是否符合某个正则表达式特点
  • re.search() 从左向右匹配正则表达式,只会匹配一次符合条件, 得到的是一个对象

match和search返回的是对象,需要group查看

代码展示:

s1 = '今天天气正好,适合买xiaomipro,邮箱是12345678@qq.com'
s2 = 'xiaom'
r1 = re.findall(r'xiao.{5}',s1)
r2 = re.match(r'xiao',s2)
r3 = re.match(r'xiao',s1)
r4 = re.search(r'xiao',s2)
print(r1)
print(r2)
print(r2.group())
print(r3)
print(r4)
print(r4.group())

运行结果:

  • re.split()切割

代码展示:

s1 = 'xiaomi.pro@12345'
r1 = re.split(r'[.,@]',s1)
print(r1)

运行结果:
在这里插入图片描述

  • re.finditer() 在大字符串中查找符合正则表达式特点的式子,得到的是一个迭代器
    代码展示:
s1 = 'xiaomi.pro@12345'
r1 = re.finditer(r'[(\d+)]',s1,re.ASCII)
for i in r1:print(i.group())
print(r1)

运行结果:
在这里插入图片描述

  • fullmatch() 将字符串整体与正则表达式进行匹配

代码展示:

text = '安徽省-合肥市'
res1 = re.fullmatch(f'(\w+)-(\w+)', text)
print(f"省份:{res1.group(1)}")
print(f"市:{res1.group(2)}")

运行结果:
在这里插入图片描述

相关文章:

Python语法之正则表达式详解以及re模块中的常用函数

正则表达式详解及re模块中的常用函数 概念、作用和步骤 概念: 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串【正则表达式】去处理其他的字符串,比如可以对其他字符串进行匹配,切分&#xf…...

《地球化学》

《地球化学》主要报道近代地球化学, 特别是其主要分支学科, 如岩石地球化学、元素地球化学、有机地球化学、环境地球化学、矿床地球化学、实验地球化学、生物地球化学、天体化学、计算地球化学、分析地球化学、海洋地球化学、沉积地球化学、纳米地球化学、油气地球化学和同位素…...

alpine openssl 编译

./config no-shared --prefix/usr/local/openssl apk add musl-dev gcc g apk add linux-headers ssh root 登录 编辑 SSH 配置文件 打开 SSH 配置文件 /etc/ssh/sshd_config: vi /etc/ssh/sshd_config PermitRootLogin yes...

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论:如何选择适合自…...

【C#设计模式(17)——迭代器模式(Iterator Pattern)】

前言 迭代器模式可以使用统一的接口来遍历不同类型的集合对象,而不需要关心其内部的具体实现。 代码 //迭代器接口 public interface Iterator {bool HashNext();object Next(); } //集合接口 public interface Collection {Iterator CreateIterator(); } //元素迭…...

二、部署docker

二、安装与部署 2.1 安装环境概述 Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使用)。 Docker CE每月发布一个Edge版本(17.03&…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装

封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...

ML 系列:第 39 节 - 估计方法:最大似然估计 (MLE)

目录 一、说明 二、什么是最大似然估计 (MLE)? 2.1 理解公式 2.2 MLE 的定义 2.3 我们何时使用 MLE? 三、结论 一、说明 在统计学领域,我们经常需要根据观察到的数据估计统计模型的参数。为此目的广泛使用的两种关键方法是最大似然估计 ( MLE…...

Linux 权限管理:用户分类、权限解读与常见问题剖析

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 💯L…...

网络原理之 UDP 协议

目录 1. UDP 协议报文格式 2. UDP 的特点 (1) 无连接 (2) 不可靠 (3) 面向数据报 (4) 全双工 3. 基于 UDP 的应用层协议 前文是:UDP 的使用 首先了解一下基础知识: 1. UDP 协议报文格式 传输层最重要的协议有两个,一个是 TCP&#x…...

并发框架disruptor实现生产-消费者模式

Disruptor是LMAX公司开源的高性能内存消息队列&#xff0c;单线程处理能力可达600w订单/秒。本文将使用该框架实现生产-消费者模式。一、框架的maven依赖 <!-- https://mvnrepository.com/artifact/com.lmax/disruptor --><dependency><groupId>com.lmax<…...

【Vivado】xdc约束文件编写

随手记录一下项目中学到的约束文件编写技巧。 时序约束 创建生成时钟 参考链接&#xff1a; Vivado Design Suite Tcl Command Reference Guide (UG835) Vivado Design Suite User Guide: Using Constraints (UG903) 通过Clocking Wizard IP创建的时钟&#xff08;MMCM或…...

Redis使用场景-缓存-缓存雪崩

前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题&#xff0c;其中缓存穿透、击穿、雪崩在面试中问的最频繁&#xff0c;本文加了图解&#xff0c;希望帮助你更直观的了解缓存雪崩&#x1f600; &#xff08;放出之前写的针对实习面试的关于Redis生产问题的博…...

概率论相关知识随记

作为基础知识的补充&#xff0c;随学随记&#xff0c;方便以后查阅。 概率论相关知识随记 期望&#xff08;Expectation&#xff09;期望的定义离散型随机变量的期望示例&#xff1a;掷骰子的期望 连续型随机变量的期望示例&#xff1a;均匀分布的期望 期望的性质线性性质期望的…...

【PlantUML系列】序列图(二)

目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如&#xff1a; Actor&…...

WPF+MVVM案例实战与特效(三十四)- 日志管理:使用 log4net 实现高效日志记录

文章目录 1、概述2、日志案例实现1、LogHelper 类详解2、代码解释3、配置文件4、实际应用案例场景 1:记录系统运行日志场景 2:记录数据库操作日志场景 3:记录 HTTP 请求日志5、总结1、概述 在WPF软件开发中,良好的日志记录机制对于系统的调试、维护和性能优化至关重要。lo…...

前端测试框架 jasmine 的使用

最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 &#xff0c;Karma 自动化完成&#xff0c;当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs &#xff0c;使用 npm 安装好必要…...

Qwen2-VL视觉大模型微调实战:LaTex公式OCR识别任务(完整代码)

《SwanLab机器学习实战教程》是一个主打「开箱即用」的AI训练系列教程&#xff0c;我们致力于提供完善的数据集、源代码、实验记录以及环境安装方式&#xff0c;手把手帮助你跑起训练&#xff0c;解决问题。 Qwen2-VL是通义千问团队最近开源的大语言模型&#xff0c;由阿里云通…...

「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算

本篇将通过 Python 和 Cangjie 双语解决简单的几何问题&#xff1a;计算圆的面积和矩形的面积。通过这道题&#xff0c;学生将掌握如何使用公式解决几何问题&#xff0c;并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…...

Groom Blender to UE5

Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好&#xff0c; While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …...

开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型

echo Hello World在同一数据库中在建一个图床数据表,产品一,一对应,图片命名 最优的方案&#xff0c;使用 rust 在构建一个 http server 用于管理非数据库资源,也可以将来对接不同的图床&#xff0c;部署方便 考虑到数据库资源和图片资源,都可以被远程访问这种方法最佳...

第七十六条:努力保持故障的原子性

当对象抛出异常之后&#xff0c;通常我们期望这个对象仍然保持在一种定义良好的可用状态之中&#xff0c;即使失败是发生在执行某个操作的过程中间。对于受检的异常而言&#xff0c;这尤为重要&#xff0c;因为调用者期望能从这种异常中进行恢复。一般而言&#xff0c;失败的方…...

Word分栏后出现空白页解决方法

Word分栏后出现空白页解决方法 只需要在后面的空白页设置相同的页面布局(分栏格式)&#xff0c;然后按Ctrl backspace即可删除该空白页。 参考文章&#xff1a;Word分栏出现空白怎么解决。...

基于HTML和CSS的校园网页设计与实现

摘要 随着计算机、互联网与通信技术的进步&#xff0c;Internet在人们的学习、工作和生活中的地位也变得越来越高&#xff0c;校园网站已经成为学校与学生&#xff0c;学生与学生之间交流沟通的重要平台&#xff0c;对同学了解学校内发生的各种事情起到了重要的作用。学校网站…...

【算法day7】字符串:反转与替换

题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...

分布式存储厂商

分布式存储 以下是对分布式存储厂商XSKY星辰天合、IOMesh&#xff08;SmartX&#xff09;、SmartX的深度对比&#xff1a; 1. XSKY星辰天合 产品与服务&#xff1a;XSKY星辰天合提供统一存储平台&#xff0c;支持块、文件和对象存储服务。已为近2400家大型政企机构实施部署&…...

合合信息扫描全能王线下体验活动:科技与人文的完美交融

文章目录 前言签到欢迎仪式产品体验智能高清滤镜去除透字效果照片高清修复 破冰行动会议感受 前言 作为合合信息旗下扫描全能王的忠实粉丝&#xff0c;上周&#xff0c;我很荣幸参与了扫描全能王“扫出你的能量buff”快闪活动及技术交流会。这次活动的不仅让我对这款强大的文档…...

单链表在Go语言中的实现与操作

简介 单链表是一种基本的线性数据结构&#xff0c;由节点组成&#xff0c;每个节点存储数据和指向下一个节点的指针。今天&#xff0c;我们将深入探讨如何在Go语言中实现和操作单链表。 单链表的优缺点 优点&#xff1a; 动态内存分配&#xff0c;灵活性高。插入和删除节点操…...

网关整合sentinel无法读取nacos配置问题分析

sentinel无法读取nacos配置问题分析 1.spring-cloud-gateway整合sentinel2.问题现象3.原因猜测4.源码分析4. 结语 最近公司需要上线一个集约项目&#xff0c;虽然为内网项目&#xff0c;但曾经有过内网被攻破&#xff0c;导致内部系统被攻击的案例&#xff0c;且集约系统同时在…...

简化XPath表达式的方法与实践

XPath表达式用于在XML或HTML文档中定位元素。有时候&#xff0c;XPath表达式可能会变得非常冗长和复杂&#xff0c;这不仅难以阅读和维护&#xff0c;而且也可能影响性能。因此&#xff0c;学会如何简化XPath表达式是非常重要的。本文将介绍几种简化XPath表达式的方法&#xff…...