【Python】一文带你了解 正则表达式 + 简单操作

news2024/12/28 18:20:59

 

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

 

        本文将为大家详细介绍 python 的正则表达式,包括简介、发展史、主要功能详解,示例代码加讲解如何使用,总结等内容,希望对大家了解和使用正则表达式有所帮助。

 

目录

一、简介

二、发展史

三、主要功能详解

        1. re.compile()

        2. re.match()

        3. re.search()

        4. re.findall()

        5. re.sub()

四、示例代码加讲解如何使用

        1. 匹配邮箱地址

        2. 匹配 IP 地址

        3. 匹配 HTML 标记

 五、总结


一、简介

        正则表达式是一种匹配文本模式的工具,广泛应用于各种编程语言中。Python 通过 re 模块提供对正则表达式的支持,可用于处理字符串、文本文件等内容。

        正则表达式的原理是定义一种规则,根据这种规则去识别目标字符串中的符合规则的内容,使用规则可以进行灵活的匹配操作。正则表达式通过一些元字符和普通字符组合起来,构成一种定义规则的语言,常用于字符串匹配和操作。

        在 Python 中,re 模块提供了常见的正则表达式功能,如编译正则表达式、匹配字符串、搜索目标字符串、替换字符串等操作。re 模块中几个常用的函数包括:re.compile()、re.match()、re.search()、re.findall()、re.sub()。下面我将详细介绍这些函数的使用方法和功能。

二、发展史

        正则表达式的概念最早起源于20世纪50年代的计算机科学领域。在1951年,美国数学家斯蒂芬·科尔纳根据最小化有限状态自动机的数学理论,提出了可以自动识别一类语言模式的方法。后来,在20世纪60年代,正则表达式得到了普及和广泛应用。

        在20世纪80年代末到90年代初,在 Unix 操作系统中引入了一种基于正则表达式的搜索工具:grep。grep 可以对文件进行正则表达式的匹配操作,并输出符合规则的行。随着互联网的普及和编程语言的发展,越来越多的编程语言提供了对正则表达式的支持,如 Perl 语言、Python 语言等。

        Python 的 re 模块提供了对正则表达式的支持,可以完成字符串中的搜索、匹配、替换等功能。相比于其他编程语言来说,Python 的正则表达式语言更加简单易懂,学习门槛较低。

三、主要功能详解

        1. re.compile()

        compile() 函数用于将正则表达式编译成一个对象,供其他函数使用。compile() 函数可以接收两个参数:pattern(正则表达式字符串)和 flags(可选参数,表示正则表达式的匹配模式)。

语法:

re.compile(pattern, flags=0)

参数说明:

  • pattern: 表示正则表达式字符串。
  • flags: 可选参数,表示正则表达式的匹配模式。

flags 参数可以接收以下常量值:

  • re.I:忽略大小写匹配
  • re.L:用于本地(locale)匹配,如正则表达式中忽略大小写
  • re.M:多行匹配模式。如果字符串中含有多行,则 ^ 匹配行的开头,$ 匹配行结尾
  • re.S:使 . 匹配包括换行符在内的所有字符
  • re.U:Unicode 匹配模式
  • re.X:详细模式。此模式忽略正则表达式中的空白和注释,可以通过转义字符 \ 实现

        下面是一个简单的示例代码,演示如何使用 compile() 函数编译正则表达式: 

import re

pattern = re.compile(r'hello')
result = pattern.findall('hello world')
print(result)

        输出结果为: 

['hello'] 

        2. re.match()

        match() 函数尝试从字符串的起始位置匹配一个正则表达式,如果匹配成功,则返回一个匹配对象,否则返回 None。match() 函数只匹配目标字符串的第一个字符。

语法:

re.match(pattern, string, flags=0)

参数说明:

  • pattern: 表示正则表达式字符串。
  • string: 目标字符串。
  • flags: 可选参数,表示正则表达式的匹配模式。

        下面是一个简单的示例代码,演示如何使用 match() 函数匹配字符串:

import re

pattern = re.compile(r'hello')
result = pattern.match('hello world')
print(result.group())

        输出结果为:

 hello

        3. re.search()

        search() 函数在目标字符串中匹配正则表达式,一旦找到匹配的串就停止搜索。如果匹配成功,则返回一个匹配对象,否则返回 None。

语法:

re.search(pattern, string, flags=0)

参数说明:

  • pattern: 表示正则表达式字符串。
  • string: 目标字符串。
  • flags: 可选参数,表示正则表达式的匹配模式。

        下面是一个简单的示例代码,演示如何使用 search() 函数匹配字符串:

import re

pattern = re.compile(r'world')
result = pattern.search('hello world')
print(result.group())

        输出结果为: 

world

        4. re.findall()

        findall() 函数将在目标字符串中找到所有正则表达式匹配的子串,并返回一个列表。

语法: 

re.findall(pattern, string, flags=0)

参数说明:

  • pattern: 表示正则表达式字符串。
  • string: 目标字符串。
  • flags: 可选参数,表示正则表达式的匹配模式。

        下面是一个简单的示例代码,演示如何使用 findall() 函数匹配字符串:

import re

pattern = re.compile(r'\d+')
result = pattern.findall('1 apple, 2 oranges, 3 bananas')
print(result)

        输出结果为: 

 ['1', '2', '3']

        5. re.sub()

        sub() 函数用于在目标字符串中查找正则表达式匹配的子串,并将其替换为指定字符串。可以使用反斜杠及数字指定要替换的内容。 

语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数说明:

  • pattern: 表示正则表达式字符串。
  • repl: 目标字符串,表示要替换成的内容。
  • string: 目标字符串。
  • count: 可选参数,表示替换的次数。默认为 0,表示替换所有匹配成功的子串。
  • flags: 可选参数,表示正则表达式的匹配模式。

        下面是一个简单的示例代码,演示如何使用 sub() 函数替换字符串:

import re

pattern = re.compile(r'orange[s]?')
result = pattern.sub('apple', '2 oranges and 3 orange')
print(result)

        输出结果为:

 2 apples and 3 apple

四、示例代码加讲解如何使用

        下面是一些示例代码,演示如何在 Python 中使用正则表达式。

        1. 匹配邮箱地址

        以下代码演示如何使用正则表达式匹配邮箱地址:

import re

pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b')
result = pattern.findall('my email is example@gmail.com')
print(result)

        输出结果为: 

['example@gmail.com'] 

        正则表达式 \b[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}\b 匹配了邮箱地址 example@gmail.com,其中的元字符解释如下:

  • \b:匹配单词的起始位置。
  • [A-Za-z0-9.%±]+:匹配由大小写字母、数字、.、、%、+ 和 - 组成的字符串。
  • @: 匹配 @ 符号。
  • [A-Za-z0-9.-]+:匹配由大小写字母、数字、. 和 - 组成的字符串。
  • .: 匹配点号。注意需要使用 \ 转义。
  • [A-Z|a-z]{2,}: 匹配大小写字母,长度至少为 2。

        2. 匹配 IP 地址

        以下代码演示如何使用正则表达式匹配 IP 地址:

import re

pattern = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')
result = pattern.findall('my IP is 192.168.0.1')
print(result)

        输出结果为: 

['192.168.0.1'] 

        正则表达式 \b(?:[0-9]{1,3}.){3}[0-9]{1,3}\b 匹配了 IP 地址 192.168.0.1,其中的元字符解释如下:

  • \b:匹配单词的起始位置。
  • (?:[0-9]{1,3}.){3}:非捕获组,匹配由一个或多个数字和点号组成的子串,重复 3 次。
  • [0-9]{1,3}:匹配由一个或多个数字组成的子串。

        3. 匹配 HTML 标记

        以下代码演示如何使用正则表达式匹配 HTML 标记:

import re

pattern = re.compile(r'<[^>]+>')
result = pattern.findall('<p>hello</p>')
print(result)

        输出结果为: 

['<p>', '</p>'] 

        正则表达式 <[^>]+> 匹配了 HTML 标记 <p> 和 </p>,其中的元字符解释如下:

  • <:匹配 < 符号。
  • [^>]+:匹配由一个或多个非 > 符号的子串。
  • :匹配 > 符号。

 五、总结

        正则表达式是一种强大的文本处理工具,可以用于基于模式的字符串匹配、替换、提取等多种操作中。Python正则表达式模块提供了一种规范化的表示方法,可以使用普通字符、特殊字符、元字符、修饰符等组成自己的正则表达式。使用Python正则表达式的步骤包括导入re模块、编写正则表达式、创建正则表达式验证对象、使用正则表达式进行匹配、解析匹配结果等。Python的正则表达式模块是一个非常强大的工具,在数据处理、文本处理、搜索引擎等领域得到了广泛应用。

 

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

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

相关文章

通过第三方软件修改 MacOS 的键盘映射

通过第三方软件修改 MacOS 的键盘映射 由于文本编辑时大量使用word level的左移、右移&#xff0c;其中&#xff1a; OSX的单词级左右移为option Left/Right Arrow&#xff0c;整行级左右移为command Left/Right Arrow 单词级移动与进行编辑常用的command不同键位&#xff0c…

Chat2DB:阿里巴巴开源的聊天数据管理工具--实践

Chat2DB&#xff1a;阿里巴巴开源的聊天数据管理工具–实践 简介 ​ Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了…

Jetpack Compose ——Row

当我们构建界面时&#xff0c;经常需要在Compose中使用Row布局来水平排列多个组件。Row提供了一种方便的方式来管理和定位子组件&#xff0c;使它们按照我们期望的方式呈现。 在Compose中&#xff0c;Row可以接受多个子组件作为参数&#xff0c;并根据指定的布局规则进行排列。…

桥梁监测方案-智慧桥梁监测管理系统

桥梁作为现代交通基础设施的重要组成部分&#xff0c;承载着大量的车辆和行人交通。然而&#xff0c;随着时间的推移&#xff0c;桥梁结构可能会受到自然环境、交通负荷和物质疲劳等因素的影响&#xff0c;从而导致潜在的风险和结构损坏。桥梁监测能够通过实时监测桥梁的结构状…

git一定要学会,加油

gitgit文档http://file:///F:/%E8%B5%84%E6%96%99%E5%A4%8D%E4%B9%A0/Git%E4%BC%98%E7%A7%80%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Git%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Pro%20Git%E4%B8%AD%E6%96%87PDF%E7%89%88.pdf init 初始化仓库 这个命令在当前目录下初始化一个 G…

安装Django 3.2的过程记录~

首先看下Django 3.2目前更新到哪些版本&#xff0c;用下面这条命令&#xff1a; pip install Django100.0.5与3.2有关的版本号有&#xff1a; 3.2a1, 3.2b1, 3.2rc1, 3.2, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 3.2.10, 3.2.11, 3.2.12, 3.2.13, …

MAC系统使用

查看端口占用情况 //如查看8080端口的占用情况 sudo lsof -i tcp:9901//比如我们想要释放Java占用的9901端口 PID 是 12420 kill -9 12420

C语言:写一个函数,实现一个整型有序数组的二分查找

题目&#xff1a; 写一个函数&#xff0c;实现一个整型有序数组的二分查找&#xff0c;找出要找的数字在数组中对应的下标。 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&#xff09;自定义函数部分&#xff1a; &#xff08;1&#xff09;. 参数&#xff1a; int…

融云《社交泛娱乐出海作战地图》,手把手教你拿下出海“最后一公里”难题

社交泛娱乐出海&#xff0c;已然是当下互联网出海的主力。关注【融云全球互联网通信云】了解更多 不少国内互联网巨头都将社交泛娱乐作为海外市场重点布局赛道。从较为传统的音视频、短视频社交出海&#xff0c;到逐渐直播出海、元宇宙社交出海&#xff0c;社交泛娱乐出海版图…

微信小程序实现tab及瀑布流页面

一、效果 二、代码 复制代码可以直接用 1、json代码 {"usingComponents": {},"navigationStyle": "custom" } 2、xml代码 <!--pages/find_module/findPage.wxml--> <view class"container_serach"><!-- 搜索模块 -…

Java EE 企业级应用开发教程题库(第二版)

前言 Java EE这是一门偏向于实践的课&#xff0c;奈何考试理论居多。一学期想搞懂三个框架&#xff0c;嘿嘿&#xff0c;难哦&#xff01;如果你是大一大二的同学&#xff0c;认认真真学习&#xff0c;真的有用。如果你是大三的同学&#xff0c;像就业并且走这个方向的同学&…

VMware Horizon 8 运维系列(一)windows系统重启被禁用的ipv6功能

前言 Horizon 8 在创建桌面池之前,需要对模板虚拟机进行配置,其中会用到windows优化工具,通过禁用一些不必要的服务或功能,让系统达到优化的效果。 最近客户提出一个需求:需要对虚拟机开启ipv6功能,并同时使用ipv6地址。通过查看模板系统,ipv6已经被优化工具禁用,所以需…

SSM整合快速入门案例(二)

文章目录 前言一、表现层与前端数据传输协议定义二、表现层与前端数据传输协议实现三、异常处理器四、项目异常处理五、前后台协议联调实现CRUD- - 查询- - 添加- - 修改- - 删除 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c…

Netty核心源码剖析(五)

1.Netty核心组件EventLoop源码剖析 1>.NioEventLoop继承图 说明: ①.ScheduledExecutorService接口表示是一个定时任务接口,EventLoop可以接受定时任务; ②.EventLoop接口:Netty 接口文档说明该接口作用:一旦Channel注册了,就处理该Channel对应的所有I/O操作; ③.Single…

学成在线----day7

1、 视频处理-技术方案 1. 作业分片方案 掌握了xxl-job的分片广播调度方式&#xff0c;下边思考如何分布式去执行学成在线平台中的视频处理任务。 任务添加成功后&#xff0c;对于要处理的任务会添加到待处理任务表中&#xff0c;现在启动多个执行器实例去查询这些待处理任务…

FPGA基础知识-层次建模的概念

学习目标&#xff1a; 提示&#xff1a;这里可以添加学习目标 理解数字电路设计中自底向上和自顶向下的设计方法&#xff1b; 解释verilog中模块和模块实例之间的区别&#xff1b; 学习从4中不同的抽象角度来描述同一个模块&#xff1b; 解释仿真中的各个组成部分&#xf…

动态NAT过载配置与验证实验

动态NAT过载配置与验证实验 【实验目的】 部署端口地址转换。熟悉端口地址转换的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 f0/0 192.168.10.1 255.255.255.0 N/A …

《低代码指南》低代码开发平台Noodl即将开源

Noodl 是一个低代码开发平台,让设计师、开发者能够用低代码的可视化编程方法构建强大的 Web 应用。目前 Noodl 已被亚马逊、三星、沃尔玛等财富 500 强企业应用于原型设计到生产环境中。 日前,Noodl 官方发出公告表示,将从现有的付费订阅模式向开源模式过渡。 Noodl 目前的…

FineReport 连接mysql报错 当前驱动加载路径...

报错内容&#xff1a; 原因为帆软自带的jar包与当前使用的mysql&#xff08;8.0&#xff09;版本不一致&#xff0c;需要去官网下载对应连接的jar包 官网下载地址… 下载后在帆软对应路径替换掉jar包即可 FineReport_11.0\webapps\webroot\WEB-INF\lib

海格里斯HEGERLS四向穿梭车系统比件箱自动化解决方案有哪些突出优势?

随着仓储物流、电商行业的快速发展&#xff0c;自动化立体库的型式和技术日益完善&#xff0c;除了典型的单深度单货位立体库外&#xff0c;也逐渐发展了双深度和多货位的立体仓库。在自动化存储设备方面&#xff0c;除堆垛机外&#xff0c;利用四向穿梭车、子母车等技术构成的…