re模块(正则)

news2025/3/19 13:15:50

【 一 】 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 re

re = 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.coloradmin.cn/o/1336027.html

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

相关文章

学Java的第三天

一、自增自减运算符 &#xff0c;自增&#xff0c;变量的值加一 --&#xff0c;自减&#xff0c;变量的值减一 和-- 既可以放在变量的后边&#xff0c;也可以放在变量的前边。 单独使用的时候&#xff0c; 和 -- 放在变量的前边还是后边&#xff0c;结果是一样的。 参与操作…

探索 React Hooks 的世界:如何构建出色的组件(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

FXCM福汇官网:深入解析BOLL指标的喇叭口形态及含义

BOLL指标是一种通过布林线&#xff08;Bollinger Bands&#xff09;的上轨线、中轨线和下轨线的相互关系来判断市场趋势和波动性的技术分析工具。BOLL指标的喇叭口形态包括开口型、收口型和紧口型&#xff0c;它们各自具有独特的含义。 《FXCM福汇官网开户》 1. 开口型喇叭口…

TIA博途中临时变量Temp的基本概念解析

TIA博途中临时变量Temp的基本概念解析 TEMP&#xff08;临时变量&#xff09;的概念是这样的。 每一个OB&#xff0c;FB&#xff0c;FC都可以声明Temp临时变量。 它们仅是在被调用时&#xff0c;由操作系统&#xff0c;根据块声明&#xff0c;临时分配的内存空间。该块结束时…

【回溯】n皇后问题Python实现

文章目录 [toc]问题描述问题转换回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 有一批共 n n n个集装箱要装上 2 2 2艘载重量分别为 c 1 c_{1} c1​和 c 2 c_{2} c2​的轮船&#xff0c;其中集装箱 i i i的重量为 w i w_{i} w…

微信小程序使用canvas制作海报并保存到本地相册(超级详细)

案例图 分析案例图都有哪些元素 1.渐变背景 2.圆形头像 3.文字 4.文字超出换行 5.图片居中 6.文字居中 7.单位适配 8.弹窗保存图片。因为一个个绘制图形太麻烦所以这里都采用了方法封装。 canvas api介绍 最后有全部代码&#xff0c;复制即用。 data数据 data() {return {myO…

快排可视化

文章目录 1. 结果1.1 结果图1.2 动画图 2. 代码2.1 快排代码2.2 绘图代码 1. 结果 红色为被选中的pt 1.1 结果图 1.2 动画图 1个pt排好序后就把该pt标红 2. 代码 2.1 快排代码 private Integer selPt(List<Integer> list, int left, int right) {if (left > rig…

C# WPF上位机开发(windows pad上的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面&#xff0c;但是windows平台不仅仅是电脑…

现代 NLP:详细概述,第 1 部分:transformer

阿比吉特罗伊 一、说明 近五年来&#xff0c;随着 BERT 和 GPT 等思想的引入&#xff0c;我们在自然语言处理领域取得了巨大的成就。在本文中&#xff0c;我们的目标是逐步深入研究改进的细节&#xff0c;并了解它们带来的演变。 二、关注就是你所需要的 2017 年&#xff0c;来…

Java多线程技术六——线程的状态

1 概述 线程在不同的运行时期存在不同的状态&#xff0c;状态信息在存在于State枚举类中&#xff0c;如下图。 每个状态的解释如下图 调用于线程有关的方法是造成线程状态改变的主要原因&#xff0c;因果关系如下图 从上图可知&#xff0c;在调用与线程有关的方法后&#xff0…

Upload-Labs-Linux

题目 1.打开靶机 随便上传一个图片&#xff0c;查看get请求发现/upload/XXX.jpg 2.创建一个脚本文件 命名为flag.php.jpg,并上传 脚本文件内容&#xff1a; <?php eval($_POST[1234])?> 3上传后复制文件get请求的链接并打开蚁剑 连接密码为123 双击链接 4&#xff…

ios 之 数据库、地理位置、应用内跳转、推送、制作静态库、CoreData

第一节&#xff1a;数据库 常见的API SQLite提供了一系列的API函数&#xff0c;用于执行各种数据库相关的操作。以下是一些常用的SQLite API函数及其简要说明&#xff1a;1. sqlite3_initialize:- 初始化SQLite库。通常在开始使用SQLite之前调用&#xff0c;但如果没有调用&a…

云计算:现代技术的基本要素

众所周知&#xff0c;在儿童教育的早期阶段&#xff0c;幼儿园都会传授塑造未来行为的一些基本准则。 今天&#xff0c;我们可以以类似的方式思考云计算&#xff1a;它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

在Android中使用Flow获取网络连接信息

在Android中使用Flow获取网络连接信息 如果你是一名Android开发者&#xff0c;你可能会对这个主题感到有趣。考虑到几乎每个应用程序都需要数据交换&#xff0c;例如刷新动态或上传/下载内容。而互联网连接对此至关重要。但是&#xff0c;当用户的设备离线时&#xff0c;数据如…

Flink电商实时数仓(六)

交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl&#xff0c;通过Interval join实现左右流的状态管理获取下单明细数据…

OGG-MySQL无法正常同步数据问题分析

问题背景: 用户通过OGG从源端一个MySQL从库将数据同步到目标端的另一个MySQL数据库里面&#xff0c;后面由于源端的从库出现了长时间的同步延时&#xff0c;由于延时差距过大最后选择通过重建从库方式进行了修复 从库重建之后&#xff0c;源端的OGG出现了报错ERROR OGG-0014…

电商数据分析-02-电商业务介绍及表结构

参考 电商业务简介 大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统 举个例子:&#x1f330; 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明&#xff0c;用户点开电商首页开始浏览&…

蓝桥杯备赛 day 1 —— 递归 、递归、枚举算法(C/C++,零基础,配图)

目录 &#x1f308;前言 &#x1f4c1; 枚举的概念 &#x1f4c1;递归的概念 例题&#xff1a; 1. 递归实现指数型枚举 2. 递归实现排列型枚举 3. 递归实现组合型枚举 &#x1f4c1; 递推的概念 例题&#xff1a; 斐波那契数列 &#x1f4c1;习题 1. 带分数 2. 反硬币 3. 费解的…

小程序面试题 | 18.精选小程序面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

大师计划1.0 - log2 CRTO笔记

CRTOⅠ笔记 log2 这个笔记是我在2023年11月23日-12月22日中&#xff0c;学习CRTO所做的一些笔记。 事实上TryHackMe的路径和htb学院包含了许多CRTO的知识并且甚至还超出了CRTO&#xff08;CS除外&#xff09;&#xff0c;所以很多东西在THM和htb学院学过&#xff0c;这次CRTO等…