当前位置: 首页 > news >正文

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

在 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.jsqmd.com/news/6556/

相关文章:

  • 2025-2026-1 20231301 《信息安全设计》第八周学习总结
  • 2025-2026-1 20231301 《信息安全设计》第七周学习总结
  • springboot+vue心理健康服务小程序(源码+文档+调试+基础修改+答疑) - 详解
  • 详细介绍:Music Tag Web 怎么安装 ffmpeg?
  • 2025-2026-1 20231301 《信息安全设计》第六周学习总结
  • 作业-1
  • MacOS拉取git代码报.DS_Store 冲突修复
  • C语言⽂件管理讲解(1)
  • 2025年9月30日
  • 2025 年快速卷帘门品牌最新推荐排行榜:聚焦智能定制与高效供货,精选快速卷帘门实力厂家
  • ARL灯塔搭建
  • 记 Charles 抓不到包 - Higurashi
  • 贼猴 0930 模拟赛 T2 | 计数
  • STM32H743-ARM例程13-SDIO - 实践
  • 题解:AT_abc311_h [ABC311Ex] Many Illumination Plans
  • 2025-9-27 提高组模拟赛 div2
  • 植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】 - 详解
  • 两场div3 逆向思维
  • 详细介绍:(基于江协科技)51单片机入门:5.定时器
  • part2
  • SuperMap iObjects .NET 11i 二次开发(十五)—— 类型转换之面转点 - 教程
  • 题解:B4410 [GESP202509 一级] 金字塔
  • 9.30总结
  • pytorch基本运算-torch.normal()函数输出多维材料时,如何绘制正态分布函数图
  • AT_agc035_c [AGC035C] Skolem XOR Tree
  • 2025.9.30总结 - A
  • Harbor磁盘空间清理指南:如何安全清理半年前的镜像 - 详解
  • 详细介绍:第14章 AI Agent——构建自主智能助理
  • Java入门级教程21——Java 缓存技术、RMI远程办法调用、多线程分割大档案
  • PowerToys新工具Light Switch:让Windows自动切换明暗主题