13.1 Python 正则表达式基础

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:

工💗重💗hao💗:野老杂谈

⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.

⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。

⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。

⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。

⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

正则表达式(Regular Expressions)是编程世界中的"魔法咒语",能够帮助我们轻松应对各种字符串匹配与处理任务。从简单的字母匹配到复杂的文本解析,正则表达式在数据清洗、日志分析、文本处理等方面发挥了重要作用。本篇文章将以幽默生动的语言,从基础概念到实战应用,带你走进正则表达式的奇妙世界。

一、什么是正则表达式?

在编程的旅程中,你是否曾有过这样的烦恼:如何在一堆乱七八糟的文本中找出某个特定的单词,或是替换掉所有的电话号码?别急,正则表达式就是为解决这种问题而生的。

简单来说,正则表达式就是一套用来匹配字符串的规则。就像我们生活中的"找茬游戏"一样,只不过正则表达式的"找茬"能力强得令人发指。

二、正则表达式的语法初探

1. 字符匹配

想象一下,你在大海捞针,而正则表达式的字符匹配就是你的万能钩子。比如,你想找到所有的字母"A",你只需要使用 A 这个字符即可。

python 复制代码
import re

text = "Apple is amazing!"
match = re.findall(r'A', text)
print(match)  # 输出: ['A']

看到了吧,这样就能轻松找到文本中的字母"A"了。

2. 通配符 .

如果你觉得字符匹配还不够强大,那就让我们来认识一下通配符 .。它可是个"万能钥匙",能匹配任何单个字符。

python 复制代码
import re

text = "Cat, Bat, Mat"
match = re.findall(r'.at', text)
print(match)  # 输出: ['Cat', 'Bat', 'Mat']

在这个例子中,.at 匹配了所有以"at"结尾的单词,不管前面是"C"还是"B"还是"M"。

3. 字符集 []

字符集让你能够在一个集合中指定要匹配的字符。比如 [aeiou] 就能匹配所有的元音字母。

python 复制代码
import re

text = "Python is powerful!"
match = re.findall(r'[aeiou]', text)
print(match)  # 输出: ['o', 'i', 'o', 'e', 'u']
4. 重复匹配 *、+、?

正则表达式还有一些特殊的符号用来处理重复的字符匹配。我们来认识一下 *、+ 和 ?。

  • * 表示前面的字符可以重复0次或多次。
  • + 表示前面的字符至少出现1次。
  • ? 表示前面的字符出现0次或1次。
python 复制代码
import re

text = "100 apples, 200 oranges, 300 bananas"
match = re.findall(r'\d+', text)
print(match)  # 输出: ['100', '200', '300']

在这个例子中,\d+ 匹配了所有连续的数字。

三、实战:一个常见的案例

1. 查找电子邮件地址

假设你有一堆文本,需要从中提取出所有的电子邮件地址。使用正则表达式,这简直是小菜一碟。

python 复制代码
import re

text = "Contact us at info@example.com or support@domain.org"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(emails)  # 输出: ['info@example.com', 'support@domain.org']

解释一下,这个看似复杂的正则表达式,其实只是由多个字符集和符号组合而成,用于匹配一个标准的电子邮件地址。

2. 替换电话号码

有时候,我们需要将文本中的电话号码替换为星号,保护隐私。这也可以通过正则表达式轻松完成。

python 复制代码
import re

text = "Call me at 123-456-7890 or 987-654-3210"
masked = re.sub(r'\d{3}-\d{3}-\d{4}', '***-***-****', text)
print(masked)  # 输出: Call me at ***-***-**** or ***-***-****
3. 数据清洗

正则表达式在数据清洗方面也是利器。比如你需要从文本中删除所有的 HTML 标签,可以使用如下的正则表达式:

python 复制代码
import re

html = "<html><head><title>Title</title></head><body><h1>Heading</h1></body></html>"
clean_text = re.sub(r'<.*?>', '', html)
print(clean_text)  # 输出: TitleHeading

四、正则表达式的坑与解决方案

正则表达式虽然强大,但也有不少坑。如果你在编写正则表达式时犯了错误,可能会导致你的匹配结果偏离预期。这里有几个常见的坑与解决方案:

1. 贪婪匹配 vs 非贪婪匹配

默认情况下,正则表达式是贪婪的,即它会尽可能多地匹配字符。如果你只想匹配最少的字符,可以使用非贪婪匹配,方法是在量词后面加上 ?。

python 复制代码
import re

text = "<div>Content</div><div>More content</div>"
matches = re.findall(r'<div>.*?</div>', text)
print(matches)  # 输出: ['<div>Content</div>', '<div>More content</div>']
2. 多行文本匹配

当你要处理多行文本时,需要特别注意正则表达式的处理方式。例如,使用 re.M 模式来匹配多行的开始或结束符。

python 复制代码
import re

text = "First line\nSecond line\nThird line"
matches = re.findall(r'^\w+', text, re.M)
print(matches)  # 输出: ['First', 'Second', 'Third']

五、正则表达式工具推荐

写正则表达式不容易,但好在有许多工具可以帮助我们编写和调试正则表达式。

1. 在线工具

推荐使用 regex101 这类在线工具,它不仅能实时显示你的正则表达式匹配结果,还能对每个符号进行解释。

2. 集成开发环境 (IDE) 支持

许多 IDE,如 PyCharm、VSCode,都内置了正则表达式的调试功能,极大地简化了编写过程。

结语

正则表达式是编程中一项非常有用的技能,尽管起初看起来有点复杂,但一旦掌握了这些规则,就会发现它在文本处理中的强大威力。希望通过这篇文章,你已经对正则表达式的基础有了清晰的认识,并且能在实际项目中灵活运用。


标签
  • 正则表达式
  • 字符匹配
  • Python 编程
  • 数据清洗
  • 字符串处理
相关推荐
MasonYyp4 小时前
声音转文字的模型
python
银河技术4 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
GIS数据转换器6 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
Wang's Blog11 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿12 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河12 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年12 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym12 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
DongQiShanRen12 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室12 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python