Python 正则表达式实战:一文搞定文本处理

news/2025/9/30 21:33:13/文章来源:https://www.cnblogs.com/soda-nav/p/19121809

在 Python 中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、搜索、替换等操作。无论是数据清洗、文本解析还是复杂的文本处理任务,正则表达式都能轻松应对。今天,就让我们一起深入学习 Python 中的正则表达式,掌握其基本用法和实战技巧。

一、正则表达式基础

(一)什么是正则表达式?

正则表达式是一种特殊的文本字符串,用于描述字符串的模式。它由一系列字符和特殊符号组成,用于匹配符合特定规则的字符串。

(二)常见正则表达式符号

  • .:匹配任意单个字符(除换行符外)
  • *:匹配前面的元素零次或多次
  • +:匹配前面的元素一次或多次
  • ?:匹配前面的元素零次或一次
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • [ ]:匹配方括号内的任意一个字符
  • [^ ]:匹配不在方括号内的任意一个字符
  • \d:匹配任意数字
  • \w:匹配任意字母或数字(等价于 [a-zA-Z0-9_]
  • \s:匹配任意空白字符(等价于 [ \t\n\r\f\v]

二、Python 中的正则表达式模块

Python 提供了一个内置模块 re,用于处理正则表达式。re 模块提供了丰富的函数和方法,用于执行正则表达式操作。yra2

(一)常用函数

  • re.match():从字符串的开头开始匹配正则表达式。
  • re.search():在字符串中搜索正则表达式。
  • re.findall():返回所有匹配的子串。
  • re.finditer():返回一个迭代器,每次返回一个匹配对象。
  • re.sub():替换字符串中的匹配部分。
  • re.split():根据正则表达式分割字符串。

(二)示例代码

import re# 匹配字符串开头
pattern = r'^Hello'
text = "Hello, World!"
match = re.match(pattern, text)
if match:print("匹配成功:", match.group())
else:print("匹配失败")# 搜索字符串
pattern = r'World'
text = "Hello, World!"
match = re.search(pattern, text)
if match:print("匹配成功:", match.group())
else:print("匹配失败")# 查找所有匹配的子串
pattern = r'\d+'
text = "123 apples, 456 oranges, 789 bananas"
matches = re.findall(pattern, text)
print("所有匹配的子串:", matches)# 替换字符串中的匹配部分
pattern = r'\d+'
text = "123 apples, 456 oranges, 789 bananas"
result = re.sub(pattern, 'X', text)
print("替换后的字符串:", result)# 根据正则表达式分割字符串
pattern = r'\s+'
text = "Hello,   World!  This is a test."
result = re.split(pattern, text)
print("分割后的字符串:", result)

三、正则表达式实战技巧

(一)提取电子邮件地址

import retext = "Contact us at support@example.com or sales@example.org."
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
print("提取的电子邮件地址:", emails)

(二)提取电话号码

import retext = "Call us at +1 (123) 456-7890 or +44 9876 543210."
pattern = r'\+\d{1,3} \(\d{3}\) \d{3}-\d{4}|\+\d{2} \d{4} \d{6}'
phones = re.findall(pattern, text)
print("提取的电话号码:", phones)

(三)验证密码强度

import redef validate_password(password):pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'if re.match(pattern, password):return Truereturn Falsepassword = "StrongP@ssw0rd"
if validate_password(password):print("密码强度合格")
else:print("密码强度不合格")

(四)提取 HTML 标签

import rehtml_text = "<html><head><title>Test</title></head><body><p>Hello, <b>World!</b></p></body></html>"
pattern = r'<[^>]+>'
tags = re.findall(pattern, html_text)
print("提取的 HTML 标签:", tags)

四、正则表达式的性能优化

(一)预编译正则表达式

如果需要多次使用同一个正则表达式,可以使用 re.compile() 预编译正则表达式,提高性能。b班不上

import repattern = re.compile(r'\d+')
text = "123 apples, 456 oranges, 789 bananas"
matches = pattern.findall(text)
print("所有匹配的子串:", matches)

(二)使用非贪婪匹配

默认情况下,正则表达式是贪婪的,会尽可能多地匹配字符。使用非贪婪匹配可以减少匹配的字符数,提高性能。SkylineWebcams

import retext = "123 apples, 456 oranges, 789 bananas"
pattern = r'\d+?'  # 非贪婪匹配
matches = re.findall(pattern, text)
print("所有匹配的子串:", matches)

(三)避免过度使用正则表达式

正则表达式虽然强大,但过度使用会降低代码的可读性和性能。在可能的情况下,尽量使用简单的字符串操作方法。ddyx

五、总结

通过本文的介绍,你已经全面掌握了 Python 中的正则表达式,从基础概念到实战技巧。以下是关键点总结:

  • 正则表达式基础:了解正则表达式的常见符号和规则。
  • 常用函数re.match()re.search()re.findall()re.finditer()re.sub()re.split()
  • 实战技巧:提取电子邮件地址、电话号码,验证密码强度,提取 HTML 标签。
  • 性能优化:预编译正则表达式,使用非贪婪匹配,避免过度使用正则表达式。

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

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

相关文章

2025-2026-1 20231301 《信息安全设计》第八周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第八周学习总结2025-2026-1 20231301 《信息安全设计》第八周学习总结 目录作业信息学习内容总结一、TLS协议深度解析二、OpenSSL SSL/TLS编程实战三、OpenSSL命令行TL…

太月星网站建设程序开发一键生成微信小程序

你知道吗&#xff0c;C类是编程世界中的一种强大工具&#xff0c;它可以帮助我们更好地组织和管理代码。接下来&#xff0c;我将为你呈现一篇近万字的C类的教程&#xff0c;希望能帮助你熟悉这个概念。 首先&#xff0c;让我们从C类的定义开始。类是一个模板&#xff0c;它描述…

2025-2026-1 20231301 《信息安全设计》第七周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第七周学习总结2025-2026-1 20231301 《信息安全设计》第七周学习总结 目录作业信息学习内容总结第十章:身份认证和PKI理论基础一、PKI体系架构深度解析二、证书处理实…

springboot+vue心理健康服务小程序(源码+文档+调试+基础修改+答疑) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

肉山谷英雄传说新手任务登录英文网站怎么做装修网站建设网

文章目录 前言UUID 处理的更改正则表达式的更改结束 前言 Android 14 已经出来好久好久了… 今天其他的暂且不论&#xff0c;单纯的讲一下 OpenJDK 17 更新的两点变更&#xff08;扒源代码&#xff09;~ 对正则表达式的更改UUID 处理 首先&#xff0c;正则表达式的更改&…

网站备案查询 工信部wordpress 删除标签页

导语 如果之前的单机版hadoop环境安装满足不了你&#xff0c;集群版hadoop一定合你胃口&#xff0c;轻松入手。目录 集群规划前置条件配置免密登录 3.1 生成密匙 3.2 免密登录 3.3 验证免密登录集群搭建 4.1 下载并解压 4.2 配置环境变量 4.4 修改配置 4.4 分发程序 4.5 初始化…

湛江企业自助建站时尚网站设计案例

1. 模型旋转角度尽量取整数&#xff0c;保证线条不会出现锯齿 2. 修改反锯齿模型为FXAA方式&#xff0c;默认的TemporalAA方式会闪烁 3. 动态更新的纹理尺寸一般都不会是2的N次方&#xff0c;比如401X518。 解决方案是 动态更新一张1024x1024的贴图的其中401X518&#xff0c;…

南宁网站建设招聘建设工程合同备案在什么网站上

2016只剩下不到百分之一的时间了&#xff0c;网上陆续看到各种企业或个人的总结或盘点&#xff0c;公司也必须规定每个员工要做年度工作总结&#xff0c;或许是环境释然&#xff0c;心里也有无数次要做总结的念头&#xff0c;尤其是月末年末这种感觉更重&#xff0c;但却没静下…

没用的博客园页面的要素介绍(待更新)

1. 关于那几行字点击查看"<b style=color:rgb(119, 248, 255)>又是一年雨季</b>","<b style=color:rgb(119, 248, 255)>青苔悄悄爬满缝隙</b>","<b style=color:…

详细介绍:Music Tag Web 怎么安装 ffmpeg?

详细介绍:Music Tag Web 怎么安装 ffmpeg?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

2025-2026-1 20231301 《信息安全设计》第六周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第六周学习总结2025-2026-1 20231301 《信息安全设计》第六周学习总结 目录作业信息学习内容总结一、Windows密码体系架构深度解析二、CryptoAPI核心编程实战三、CSP服…

作业-1

实验任务一task1-1#include<stdio.h> #include<stdlib.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");printf(" O \n");printf("…

MacOS拉取git代码报.DS_Store 冲突修复

命令到冲突的文件夹下 1、先查看当前目录下面是否有.DS_Store 这个文件ls -a2、如果存在则继续运行git rm -r --cached .DS_Store

国家住房和城乡建设部官方网站下载百度官方网站

什么是&#xff1f;为什么&#xff1f;需要负载均衡 一个网站在创建初期&#xff0c;一般来说都是只有一台服务器对用户提供服务 ​ 从图里可以看出&#xff0c;用户经过互联网直接连接了后端服务器&#xff0c;如果这台服务器什么时候突然 GG 了&#xff0c;用户将无法访问这…

自己有网站怎么做点卡?商业网点建设中心网站

720云全景漫游制作工具自2014年8月上线后&#xff0c;为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务&#xff0c;获得众多创作者的青睐与认可&#xff0c;同时也承载了创作者越来越多的期望&#xff0c;为了给大家提供更灵活多样的功能…

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

完整教程:Java核心 之JVM

完整教程:Java核心 之JVM2025-09-30 21:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

如何查询网站备案信息查询如何注册公司营业执照

使用rm -rf命令转载于:https://www.cnblogs.com/dyh-air/p/7726611.html

如何查询网站的注册信息黄骗免费网站

文章目录 1.计算机网络的功能:2.计算机网络的分类:3.主机间的通信方式:4.电报交换、报文交换、分组交换的区别:5.计算机网络的性能指标:6.0SI模型和TCP/IP模型:7.通信信通的方式:8.端到端的通信与点到点通信的区别:9.同步通信和异步通信:10.频分复用、时分复用、波分复用和码分…

9.30 闲话

never be back,but i am back于是我越来越念旧 czh: 不出意外的话,这应该是我的最后一舞了,之后 OI 可能就只是当做消遣了。已经初四,感觉继续冲 OI 希望已经不大,更何况在强省,又何况同校的同级的也比我强很多。…