13.1 Python 正则表达式基础

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
工💗重💗hao💗:野老杂谈
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。
⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

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

一、什么是正则表达式?

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

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

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

1. 字符匹配

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

import re

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

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

2. 通配符 .

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

import re

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

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

3. 字符集 []

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

import re

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

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

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

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

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

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

1. 查找电子邮件地址

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

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. 替换电话号码

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

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 标签,可以使用如下的正则表达式:

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 非贪婪匹配

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

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 模式来匹配多行的开始或结束符。

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 编程
  • 数据清洗
  • 字符串处理

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野老杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值