深入解析 Python 正则表达式:全面指南与实战示例

深入解析 Python 正则表达式:全面指南与实战示例

📌 引言

正则表达式(Regular Expressions, regex)是用于文本匹配、查找和替换的强大工具。在 Python 中,我们可以使用 re 模块来处理正则表达式。无论是数据清洗、日志分析,还是字符串解析,正则表达式都能极大地提高效率。

本篇文章将详细介绍 Python 中正则表达式的 语法规则、常见操作及实战示例,让你轻松掌握正则表达式的核心技能!🚀


1. 导入 re 模块

在 Python 中,所有正则操作都需要 re 模块:

import re

2. 正则表达式基本语法

✅ 特殊字符

符号含义示例匹配结果
.任意单个字符(除换行符)a.b"acb", "a0b"
^以某个字符串开头^Hello"Hello world"
$以某个字符串结尾world$"Hello world"
*前面字符重复 0 次或多次ab*"a", "ab", "abb"
+前面字符重复 1 次或多次ab+"ab", "abb"
?前面字符 0 次或 1 次ab?"a", "ab"
{n}前面字符 恰好 n 次a{3}"aaa"
{n,}前面字符 至少 n 次a{2,}"aa", "aaa"
{n,m}前面字符 n 到 m 次a{1,3}"a", "aa", "aaa"
[]字符类,匹配任意一个字符[abc]"a", "b", "c"
``逻辑 “或”`apple
\d数字 [0-9]\d{3}"123"
\D非数字 [^0-9]\D"a", "@"
\s空白字符(空格、制表符等)\s+" "
\w单词字符 [a-zA-Z0-9_]\w+"hello123"

3. 正则表达式常见操作

re.match() —— 从字符串起始位置匹配

import repattern = r"hello"
text = "hello world"match = re.match(pattern, text)
if match:print("匹配成功:", match.group())  # hello
else:print("匹配失败")

注意re.match() 只匹配开头部分,如果 "hello" 不在字符串开头,匹配会失败。


re.search() —— 在整个字符串中搜索

import repattern = r"world"
text = "hello world"search = re.search(pattern, text)
if search:print("匹配成功:", search.group())  # world

适用于 查找字符串任意位置的匹配。


re.findall() —— 查找所有匹配项

import repattern = r"\d+"
text = "订单号123,金额456元"matches = re.findall(pattern, text)
print(matches)  # ['123', '456']

适用于 提取多个匹配项。


re.finditer() —— 迭代查找

import repattern = r"\d+"
text = "订单号123,金额456元"matches = re.finditer(pattern, text)
for match in matches:print(match.group())  # 123  456

适用于 需要保留匹配位置的情况(match.start() 可获取匹配位置)。


re.sub() —— 替换字符串

import repattern = r"\d+"
text = "订单号123,金额456元"result = re.sub(pattern, "XXX", text)
print(result)  # 订单号XXX,金额XXX元

适用于 替换敏感信息,如手机号、身份证号等。


re.split() —— 按正则拆分字符串

import retext = "apple,banana;orange|grape"
pattern = r"[,;|]"  # 逗号、分号、竖线分割result = re.split(pattern, text)
print(result)  # ['apple', 'banana', 'orange', 'grape']

适用于 按多个分隔符拆分字符串。


4. 正则表达式实战案例

案例 1:验证电子邮件

import redef is_valid_email(email):pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"return re.match(pattern, email) is not Noneprint(is_valid_email("test@example.com"))  # True
print(is_valid_email("invalid-email"))     # False

案例 2:提取网页中的所有 URL

import retext = "访问 https://www.google.com 或 http://www.github.com 获取更多信息"
pattern = r"https?://[a-zA-Z0-9./-]+"urls = re.findall(pattern, text)
print(urls)  # ['https://www.google.com', 'http://www.github.com']

案例 3:隐藏身份证号码

import retext = "张三的身份证号是 123456199012123456"
pattern = r"(\d{6})\d{8}(\d{4})"masked_text = re.sub(pattern, r"\1********\2", text)
print(masked_text)  # 张三的身份证号是 123456********3456

🎯 总结

方法用途
re.match()仅匹配开头
re.search()在字符串中查找第一次匹配
re.findall()查找所有匹配项,返回列表
re.finditer()查找所有匹配项,返回迭代器
re.sub()替换匹配内容
re.split()按正则表达式拆分字符串

掌握正则表达式后,你可以在数据处理、文本分析、网页爬取等场景中大幅提高效率!💡

如果你觉得这篇文章有帮助,欢迎分享或收藏!🚀 有问题?欢迎留言讨论! 😊

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

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

相关文章

Four.meme是什么,一篇文章读懂

一、什么是Four.meme? Four.meme 是一个运行在 BNB 链的去中心化平台旨在为 meme 代币供公平启动服务。它允许用户以极低的成本创建和推出 meme 代币,无需预售或团队分配,它消除了传统的预售、种子轮和团队分配,确保所有参与者有…

解决PHP内存溢出问题的讨论和分析

PHP作为一种广泛使用的服务器端脚本语言,在处理大量数据或复杂任务时,常常会遇到内存溢出的问题。内存溢出不仅会导致程序崩溃,还可能影响服务器的稳定性。本文将探讨解决PHP内存溢出问题的最佳实践,并通过代码示例进行详细说明。…

git,openpnp - 根据安装程序打包名称找到对应的源码版本

文章目录 git,openpnp - 根据安装程序打包名称找到对应的源码版本概述笔记备注 - 提交时间不可以作为查找提交记录的依据END git,openpnp - 根据安装程序打包名称找到对应的源码版本 概述 想在openpnp官方最新稳定版上改一改,首先就得知道官方打包的安装程序对应的…

基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速,传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统,通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…

Unity | Tag、Layer常量类生成工具

在项目开发中我们可以对诸如Layer、Tag等编辑器数据进行常量生成,来代替在代码中通过输入字符串生成常量的形式以提高开发效率。 Layer的生成可以通过LayerMask.LayerToName获取层名称(也可以从TagManager.asset中获得 ),Tag的生成…

两个手机都用流量,IP地址会一样吗?深入解析

在日常生活中,我们常常会同时使用多台手机设备上网,尤其是在流量充足的情况下。你是否曾好奇过,当两台手机同时使用流量上网时,它们的IP地址会是一样的吗?这个问题看似简单,却涉及移动网络的技术原理。本文…

后端——AOP异步日志

需求分析 在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响…

Qt的内存管理机制

在Qt中,显式使用new创建的对象通常不需要显式调用delete来释放内存,这是因为Qt提供了一种基于对象树(Object Tree)和父子关系(Parent-Child Relationship)的内存管理机制。这种机制可以自动管理对象的生命周期,确保在适当的时候释放内存&…

React:React主流组件库对比

1、Material-UI | 官网 | GitHub | GitHub Star: 94.8k Material-UI 是一个实现了 Google Material Design 规范的 React 组件库。 Material UI 包含了大量预构建的 Material Design 组件,覆盖导航、滑块、下拉菜单等各种常用组件,并都提供了高度的可定制…

排序算法(插入,希尔,选择,冒泡,堆,快排,归并)

1.插入排序 插入排序的主要思想是额外申请一个空间cur,让cur一开始等于数组的第1号位置,设置i1,让i-1的元素与其比较,如果arr[i-1]>arr[i],就让arr[i1] arr[i],当进行到最后一次对比结束,i-1,再让arr[…

python学习笔记--实现简单的爬虫(二)

任务:爬取B站上最爱欢迎的编程课程 网址:编程-哔哩哔哩_bilibili 打开网页的代码模块,如下图: 标题均位于class_"bili-video-card__info--tit"的h3标签中,下面通过代码来实现,需要说明的是URL中…

Vue3 实现pdf预览

1.使用到的插件 vue3-pdf-app 以及预览效果 2.下载依赖 // 可以使用npm 以及pnpm // 下载版本1.0.3 pnpm install vue3-pdf-app^1.0.3 3.封装pdfModel组件复用 <template><VuePdfApp :page-scale"pageScale" :theme"theme" :style"width: …

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一&#xff1a;继承 ElasticsearchRepository&#xff08;适合简单查询&#xff09; 直接使用想自定义自己的Repository接口 方式…

【Clang AST】基于 Clang 获取分析 AST

The Clang AST AST&#xff08;Abstract Syntax Tree&#xff09;抽象语法树 AST是什么 抽象语法树&#xff08;Abstract Syntax Tree, AST&#xff09;是源代码的抽象表示&#xff0c;广泛用于编译器和分析工具中。 AST将源代码的语法结构转换为树形结构&#xff0c;其中每…

onedav一为导航批量自动化导入网址(完整教程)

OneNav作为一个功能强大的导航工具,支持后台管理、加密链接、浏览器书签批量导入等功能,能够帮助用户轻松打造专属的导航页面。今天,我将为大家详细介绍如何实现OneNav导航站的批量自动化导入网址。 1、建立要批量导入的表格 格局需要创建表格,表格的要求是一定要有需要,…

文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能

Aspose.Words是一个功能强大的 Word 文档处理库。它可以帮助开发人员自动编辑、转换和处理文档。 自 24.11 版以来&#xff0c;Aspose.Words for .NET 提供了 AI 驱动的文档摘要功能&#xff0c;使用户能够从冗长的文本中快速提取关键见解。在 25.2 版中&#xff0c;我们通过使…

AI本地部署之dify

快捷目录 Windows 系统一、环境准备:首先windows 需要准备docker 环1. 安装Docker desktop2. 安装Docker3. 配置Docker 镜像路径4. 配置Docker 下载镜像源5. 重启Docker服务二、Dify 下载和安装1. Dify下载2. Dify 配置3. Dify 安装附件知识:4. Dify创建账号三、下载Ollama d…

DDS协议(二)

一、DDS发布订阅机制 基于发布/订阅的数据分发服务为各种虚拟机载设备之间的通信提供了统一的底层支撑 其技术原理如图所示&#xff1a; 发布方应用程序和订阅方应用程序分别同发布/订阅中间件通信&#xff0c; 而数据的实际分发是由发布/订阅中间件来处理。 发布方将包含主题…

GitHub供应链攻击事件:Coinbase遭袭,218个仓库暴露,CI/CD密钥泄露

此次供应链攻击涉及GitHub Action "tj-actions/changed-files"&#xff0c;最初是针对Coinbase的一个开源项目的高度定向攻击&#xff0c;随后演变为范围更广的威胁。 攻击过程与影响 Palo Alto Networks Unit 42在一份报告中指出&#xff1a;“攻击载荷主要针对其…