re模块(正则)

【 一 】 re模块概述

在线测试工具 正则表达式在线测试 - 站长工具

        随着正则表达式越来越普遍,Python 内置库 re 模块也支持对正则表达式使用

Python 提供了re模块可以支持正则表示表达式使用,re模块提供了9个常量、12个函数

使用方法:

re模块是Pytohon内置库,我们只需要import re就可以直接导入进去正常使用了

re 模块对象组成:

1.正则对象:用于执行正则表达式相关操作的实体

2.匹配对象: 用于存放正在表达式匹配的结果并提供用于获取相关匹配结果的方法

【 二 】re模块的常量

【 三 】 字符组

  • [abc]:匹配字符集合中的任意一个字符,即匹配'a'、'b'或'c'。
  • [^abc]:匹配除字符集合中的任意一个字符以外的字符。
  • [a-z]:匹配指定范围内的任意小写字母。
  • [A-Z]:匹配指定范围内的任意大写字母。
  • [0-9]:匹配指定范围内的任意数字。
  • [a-zA-Z]:匹配指定范围内的任意字母。
  • [a-zA-Z0-9]:匹配指定范围内的任意字母或数字。

元字符:

        元字符是正则表达式中具有特殊意义的字符。它们用于匹配模式中的特定字符或字符集合。以下是一些常见的元字符及其含义:

  1. .(点号):匹配除换行符之外的任意字符。

  2. ^(脱字符):匹配输入字符串的开头。

  3. $(美元符号):匹配输入字符串的结尾。

  4. *(星号):匹配前面的字符零次或多次。

  5. +(加号):匹配前面的字符一次或多次。

  6. ?(问号):匹配前面的字符零次或一次。

  7. {n}:匹配前面的字符恰好 n 次。

  8. {n,}:匹配前面的字符至少 n 次。

  9. {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。

  10. [](方括号):用于定义字符集合,可以匹配其中的任意一个字符。

  11. ()(圆括号):用于分组字符,可以应用其他元字符,如 |*

  12. \(反斜杠):用于转义特殊字符,使其失去特殊意义。

import re# 匹配包含数字和字母的字符串
pattern = r'(?=.*\d)(?=.*[a-zA-Z]).+'
text = "a1b2c3"
result = re.match(pattern, text)if result:print("字符串符合要求")
else:print("字符串不符合要求")

 转义符:

        在正则表达式中,某些字符具有特殊含义,如 .*+?^$[](){} 等。如果想要匹配这些字符本身,而不是它们的特殊含义,需要使用转义符 \

        例如,为了匹配字符串 a.b,可以使用正则表达式 a\.b。在这个表达式中,\. 表示匹配实际的 . 字符,而不是其特殊含义(匹配任意单个字符)。

以下是一些常用的正则表达式转义字符:

        需要注意的是,在 Python 中,反斜杠本身也是一个特殊字符,因此在正则表达式中使用反斜杠时,需要使用两个反斜杠来表示一个。例如,要匹配字符串 C:\Windows\System32,可以使用正则表达式 C:\\Windows\\System32。 

 

量词:

        在正则表达式中,量词(Quantifiers)用于指定模式重复出现的次数。常见的量词包括:

  1. *:匹配前面的模式零次或多次。例如,ab*c可以匹配'ac'、'abc'、'abbc'等。
  2. +:匹配前面的模式一次或多次。例如,ab+c可以匹配'abc'、'abbc'、'abbbc'等。
  3. ?:匹配前面的模式零次或一次。例如,colou?r可以匹配'color'或'colour'。
  4. {n}:匹配前面的模式恰好出现n次。例如,a{3}可以匹配'aaa'。
  5. {n,}:匹配前面的模式至少出现n次。例如,a{2,}可以匹配'aa'、'aaa'、'aaaa'等。
  6. {n,m}:匹配前面的模式出现n到m次。例如,a{2,4}可以匹配'aa'、'aaa'、'aaaa'。

除了上述基本的量词外,还可以使用特殊的量词简化匹配操作,例如:

  • *?:非贪婪模式的零次或多次匹配。
  • +?:非贪婪模式的一次或多次匹配。
  • ??:非贪婪模式的零次或一次匹配。
  • {n}?:非贪婪模式的恰好n次匹配。
  • {n,}?:非贪婪模式的至少n次匹配。
  • {n,m}?:非贪婪模式的n到m次匹配。

以下是一些使用量词的示例:

  • 匹配重复出现的数字:

    • \d+:匹配一个或多个数字。
  • 匹配重复出现的连续字母:

    • [a-z]+:匹配一个或多个小写字母。
  • 匹配重复出现的日期格式:

    • \d{4}-\d{2}-\d{2}:匹配形如'YYYY-MM-DD'的日期。

希望以上解释和示例能帮助你更好地理解和使用正则表达式中的量词。

 

【 四】re模块的编译方法

        Python 内置库re模块提供complie()方法来对正则表达式字符进行编译

re.compile(strPattern[, flag]):

  • strPattern 参数

    1. 这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。
    2. 对正则表达式进行编译后,会被提前缓存,重复使用提高效率
  • flag参数

    1. 该参数指定匹配模式,取值可以使用按位运算符'|'表示同时生效,比如re.I | re.M。

    2. 可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。

import rere = re.compile('正则表达式')
m = re.match('re')

re.complie()会对正则表达提前缓存,提高正则表达式重复使用效率

【 四 】re模块进行只要正则表达式进行被人匹配:

1.编写Python正则表达式字符串re

2.使用re.compile()对正则表达式进行编译成正则对象Pattern ps

3.正则对象ps调用p.match()或者p.fullmatch()函数得到匹配对象Match m

4.通过匹配对象  m 内容进行判断,匹配是否成功

re = "正则表达式"
ps = re.compile(re)
m = ps.match("检测的文本")if m:print(m.group())

re 模块使用正则表达式进行内容查找、替换等操作

  • sp.search("检测内容") 使用编译后的模式 sp 在字符串 "检测内容" 中搜索匹配的第一个结果。返回的结果是一个 Match 对象,可以通过调用对象的方法获取匹配到的结果。

  • sp.findall("检测内容") 使用编译后的模式 sp 在字符串 "检测内容" 中查找所有匹配的结果,并以列表形式返回所有匹配到的子串。

  • sp.finditer("检测内容") 使用编译后的模式 sp 在字符串 "检测内容" 中查找所有匹配的结果,并返回一个迭代器,通过迭代器可以遍历所有匹配的子串。

  • sp.sub("替换内容", "检测内容") 使用编译后的模式 sp 在字符串 "检测内容" 中查找匹配的子串,并将其替换为 "替换内容"。返回替换后的新字符串。

  • sp.subn("替换内容", "检测内容") 使用编译后的模式 sp 在字符串 "检测内容" 中查找匹配的子串,并将其替换为 "替换内容"。返回替换后的新字符串和替换的总次数。

  • sp.split("检测内容") 使用编译后的模式 sp 将字符串 "检测内容" 按照匹配的模式进行分割,返回分割后的子串列表。

ps = '正则表达式'
sp = re.compile(ps)# 查找
mf1 = sp.search("检测内容")
mf2 = sp.findall("检测内容")
mf3 = sp.finditer("检测内容")# 替换
ms = sp.sub("检测内容")
ms2 = sp.subn("检测内容")# 分割
mp = sp.split("检测内容")

具体示例:

import re# 编译正则表达式模式
pattern = re.compile(r'^hello')# 在字符串中查找匹配的子串
text = 'hello world, hello python, hello regex'
match_list = pattern.findall(text)# 输出匹配到的子串列表
print(match_list)  # ['hello', 'hello', 'hello']# 替换匹配到的子串
new_text = pattern.sub('world', text)# 输出替换后的新字符串
print(new_text)  # 'world world, world python, world regex'# ['hello']
# world world, hello python, hello regex

正则表达式方法总结:

  1. re.compile(pattern, flags=0):编译正则表达式模式,返回一个正则表达式对象。

  2. re.search(pattern, string, flags=0):在字符串中搜索模式匹配的第一个位置,返回一个 Match 对象。如果没有匹配到,则返回 None。

  3. re.match(pattern, string, flags=0):从字符串开头开始匹配模式,返回一个 Match 对象。如果没有匹配到,则返回 None。

  4. re.findall(pattern, string, flags=0):查找字符串中所有与模式匹配的子串,并以列表形式返回所有匹配到的子串。

  5. re.finditer(pattern, string, flags=0):查找字符串中所有与模式匹配的子串,并返回一个迭代器,通过迭代器可以遍历所有匹配的子串。

  6. re.sub(pattern, repl, string, count=0, flags=0):使用指定的替换字符串 repl,将字符串中与模式 pattern 匹配的子串替换为替换字符串。可选参数 count 指定最多替换的次数。

  7. re.split(pattern, string, maxsplit=0, flags=0):按照模式匹配的位置,将字符串分割为若干子串,并返回一个列表。可选参数 maxsplit 指定最多分割的次数。

  8. Match.group([group1, …]):返回与模式中的分组对应的子串。可选参数 group 指定要获取的分组,如果未指定,则默认返回整个匹配到的子串。

  9. Match.groups(default=None):返回一个包含所有分组子串的元组。可选参数 default 指定当一个分组未匹配到时的默认值。

  10. Match.groupdict(default=None):返回一个包含所有命名分组的字典。可选参数 default 指定当一个分组未匹配到时的默认值。

【1】匹配邮箱地址

import re# 定义正则表达式模式
pattern = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+$'# 测试样例
emails = ['abc@163.com', '123@qq.com', 'test.mail@gmail.com', 'invalid_email']# 对每个样例进行匹配测试
for email in emails:if re.match(pattern, email):print(f'{email} is a valid email address')else:print(f'{email} is an invalid email address')# abc@163.com is a valid email address
# 123@qq.com is a valid email address
# test.mail@gmail.com is an invalid email address
# invalid_email is an invalid email address

【 2 】匹配HTML标签中的内容

import re# 定义正则表达式模式
pattern = r'<[^>]+>(.*?)</[^>]+>'# 测试样例
html = '<div class="content">Hello, <b>world</b>!</div>'# 查找所有匹配的子串
matches = re.findall(pattern, html)# 输出匹配到的结果
print(matches)  # ['Hello, ', 'world', '!']

【 3 】过滤HTML标签

import re# 定义正则表达式模式
pattern = r'<[^>]+>'# 测试样例
html = '<div class="content">Hello, <b>world</b>!</div>'# 使用 sub() 函数将所有标签替换为空字符串
text = re.sub(pattern, '', html)# 输出替换后的文本
print(text)  # 'Hello, world!'

【 4 】匹配IP地址

import re# 定义正则表达式模式
pattern = r'^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$'# 测试样例
ips = ['192.168.0.1', '127.0.0.1', '10.0.0.1', '256.0.0.1', '1.2.3']# 对每个样例进行匹配测试
for ip in ips:if re.match(pattern, ip):print(f'{ip} is a valid IP address')else:print(f'{ip} is an invalid IP address')

        以上是一些常见的正则表达式示例,你可以根据具体需求自定义正则表达式模式,并使用 re 模块提供的函数对字符串进行匹配、替换和分割操作。

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

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

相关文章

1.1.0 IGP高级特性之BFD

双向转发检测技术 BFD&#xff08;Bidirectional Forwarding Detection&#xff0c;双向转发检测&#xff09; 提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状态。【每个厂家都支持的】 B…

6款AI商品海报创作神器,让设计创意无限!

曾经&#xff0c;为了展现物品的美好&#xff0c;我们煞费苦心地设计造型&#xff0c;捕捉那一刹的灵感&#xff1b;为了制作商品的海报&#xff0c;我们四处寻找那些能触动心灵的素材&#xff1b;为了拍摄产品的完美瞬间&#xff0c;我们不断调整角度&#xff0c;期待光与影的…

引用jquery.js的html5基础页面模板

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

【JavaEE初阶二】 Thread类及常见方法

1. 线程的创建 主要来简单学习一下以下几种方法&#xff1a; 1.1 继承 Thread 类 具体代码见前面的一章节&#xff0c;主体的步骤有以下几部分&#xff1b; 1、继承 Thread 来创建一个自定义线程类MyThread class MyThread2 extends Thread{//重写run方法Overridepublic void …

智能监控平台/视频共享融合系统EasyCVR点击通道后页面分页不显示是什么原因?如何解决?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

交换机端口镜像技术原理与配置

在网络维护的过程中会遇到需要对报文进行获取和分析的情况&#xff0c;比如怀疑有攻击报文&#xff0c;此时需要在不影响报文转发的情况下&#xff0c;对报文进行获取和分析。镜像技术可以在不影响报文正常处理流程的情况下&#xff0c;将镜像端口的报文复制一份到观察端口&…

vr虚拟高压电器三维仿真展示更立体全面

VR工业虚拟仿真软件的应用价值主要体现在以下几个方面&#xff1a; 降低成本&#xff1a;通过VR技术进行产品设计和开发&#xff0c;可以在虚拟环境中进行&#xff0c;从而减少对物理样机的依赖&#xff0c;降低试错成本和时间。此外&#xff0c;利用VR技术构建的模拟场景使用方…

web功能实例 - Canvas裁剪工具

嗯,手撸官方文档2天&#xff0c;发现没啥用&#xff0c;尤其是动画,那种计算出来的&#xff0c;根本想不到。因此学着学了抱着要做个东西的想法,去网上找相关案例,最终做出了这个裁剪工具。 PS :先说一下思路: 核心实现有3个canvas图层, 其中一个负责图片的预览。另外2个叠加到…

.Net7.0 或更高版本 System.Drawing.Common 上传图片跨平台方案

项目升级.Net7.0以后&#xff0c;System.Drawing.Common开关已经被删除&#xff0c;且System.Drawing.Common仅在 Windows 上支持 &#xff0c;于是想办法将原来上传图片验证文件名和获取图片扩展名方法替换一下&#xff0c;便开始搜索相关解决方案。 .Net6.0文档&#xff1a;…

各种不同的安科瑞电力物联网仪表实现互联互通

安科瑞 崔丽洁 电力物联网是物联网在智能电网中的应用&#xff0c;是有效整合通信基础设施资源和电力基础设施资源&#xff0c;提高电力系统信息化水平&#xff0c;改善电力系统现有基础设施利用效率的重要举措。 电力物联网仪表为终端感知设备&#xff0c;该系列产品将我们多年…

Windows下安装Oracle19C

官网下载oracle19c 以及客户端 官网地址&#xff1a;Software Download | Oracle 这个是要登录账号的,没有的可以注册,登录上 这个时候在点开这个官网:Database Software Downloads | Oracle 往下面滑 点了之后有个界面注意事项勾上,点下载,你就会下载: 安装oracle19c 解压安…

哪些超声波清洗机值得买?五款超声波清洗机实测大对比!

在当今快节奏的生活中&#xff0c;我们对于日常用品的清洁度要求越来越高。为了满足这一需求&#xff0c;超声波清洗机应运而生&#xff0c;以其高效、便捷的清洁方式赢得了广泛的市场。然而&#xff0c;面对市场上琳琅满目的超声波清洗机品牌和型号&#xff0c;很多时候都是无…