Python基础教程(十六):正则表达式

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

引言

正则表达式是处理字符串的强大工具,尤其在数据清洗、文本解析和模式匹配等场景中发挥着重要作用。Python 提供了 re 模块来支持正则表达式的使用,本文将带你深入了解 Python 中的正则表达式,从基本语法到高级用法,结合实际案例,让你成为正则表达式的高手。

一、正则表达式基础

正则表达式由普通字符(如字母 a-z)和特殊字符(称为元字符)组成。元字符在正则表达式中具有特殊含义,它们可以表示一个字符集、一个位置等。下面是一些常用的元字符:

.:匹配任意除换行符以外的字符。

*:匹配前面的子表达式零次或多次。

+:匹配前面的子表达式一次或多次。

?:匹配前面的子表达式零次或一次。

^:匹配输入字符串的开始位置。

$:匹配输入字符串的结束位置。

...\]:字符集,匹配方括号中的任意字符。 \[\^...\]:否定字符集,匹配任何不在方括号中的字符。 \|:或,匹配 \| 左右的表达式任意一个。 (...):分组,将多个字符当做一个整体进行匹配。 * **元字符** :如 `.` 匹配任意单个字符,`*` 表示前面的元素可以出现任意次,包括0次。 * **字符集** :`[abc]` 匹配 'a' 或 'b' 或 'c'。 * **位置锚点** :`^` 匹配行的开始,`$` 匹配行的结束。 #### 二、Python `re` 模块常用方法 1. **`re.search(pattern, string)`**:扫描整个字符串并返回第一个成功的匹配。 2. **`re.match(pattern, string)`**:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功,则返回 None。 3. **`re.findall(pattern, string)`**:查找字符串中所有匹配正则表达式的子串,并返回一个列表。 4. **`re.finditer(pattern, string)`** :类似于 `findall`,但返回的是一个迭代器,每次迭代返回一个 Match 对象。 5. **`re.sub(pattern, repl, string)`**:将字符串中所有匹配正则表达式的子串替换为指定字符串。 **参数说明:** * pattern 匹配的正则表达式 * string 要匹配的字符串。 * flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 #### 三、经典案例展示 ##### 案例 1:验证电子邮件地址 ```python import re email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" email = "example@example.com" if re.match(email_pattern, email): print("Valid email") else: print("Invalid email") ``` 此案例中,我们定义了一个电子邮件的正则表达式,然后使用 `re.match` 方法来验证给定的电子邮件地址是否符合预期的格式。 ##### 案例 2:获取电话号码 ```python phone_text = "Call me at 555-1234 or 555-6789." phone_pattern = r"\d{3}-\d{4}" matches = re.findall(phone_pattern, phone_text) for match in matches: print(match) ``` 这段代码会输出电话号码列表,即 `['555-1234', '555-6789']`。 ##### 案例 3:替换敏感词 ```python text = "Bad words should be filtered out. Bad!" bad_word_pattern = r"Bad" # 使用空字符串替换 clean_text = re.sub(bad_word_pattern, "", text) print(clean_text) # 或者替换为其他字符串 clean_text = re.sub(bad_word_pattern, "Good", text) print(clean_text) ``` 在这个例子中,我们使用 `re.sub` 方法来替换文本中的敏感词。 #### 四、进阶用法 * **分组和引用** :`(...)` 可以用来捕获括号内的匹配结果,之后可以通过 `\1`, `\2`, ... 来引用这些组。 * **贪婪与非贪婪匹配** :默认情况下,`*`, `+`, `{n,m}` 是贪婪的,会尽可能多的匹配。添加 `?` 变成非贪婪,即尽可能少的匹配。 * **转义字符** :在正则表达式中,某些字符具有特殊含义,如果想将其视为普通字符,需要使用 `\` 进行转义。 #### 五、总结 正则表达式是处理文本的强大武器,而 Python 的 `re` 模块提供了丰富的功能来支持正则表达式的应用。通过本文的学习,你已经掌握了正则表达式的使用方法,以及如何在 Python 中实现文本匹配、提取和替换。继续练习和探索,你将能够更熟练地运用正则表达式解决实际问题。 *** ** * ** *** ### 结束语 **喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘** ![打赏下吧](https://img-blog.csdnimg.cn/direct/d8225167d69c4e028830580b73447340.jpeg) 💝💝💝**如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章** 💝💝💝**关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!** | python相关文章索引 | 文章链接 | |:----------------------------|:---------------------------------------------------------------------------------------------------------------| | Python基础语法(一):标识符与保留字部分 | [Python基础语法(一):标识符与保留字部分](https://blog.csdn.net/mwm0213/article/details/135721529?spm=1001.2014.3001.5501) | | Python基础语法(二):数据类型 | [Python基础语法(二):数据类型](https://blog.csdn.net/mwm0213/article/details/135723693?spm=1001.2014.3001.5501) | | Python基础语法(三):运算符 | [Python基础语法(三):运算符](https://blog.csdn.net/mwm0213/article/details/135730149?spm=1001.2014.3001.5501) | | Python基础语法(四):条件控制 | [Python基础语法(四):条件控制](https://blog.csdn.net/mwm0213/article/details/136003234?spm=1001.2014.3001.5501) | | Python基础语法(五):循环语句 | [Python基础语法(五):循环语句](https://blog.csdn.net/mwm0213/article/details/139532723?spm=1001.2014.3001.5502) | | Python基础语法(六):推导式编程 | [Python基础语法(六):推导式编程](https://blog.csdn.net/mwm0213/article/details/139533723?spm=1001.2014.3001.5502) | | Python基础教程(七):函数编程-从基础到进阶 | [Python基础教程(七):函数编程-从基础到进阶](https://blog.csdn.net/mwm0213/article/details/139562599?spm=1001.2014.3001.5501) | | Python基础教程(八):迭代器与生成器编程 | [Python基础教程(八):迭代器与生成器编程](https://blog.csdn.net/mwm0213/article/details/139562914?spm=1001.2014.3001.5502) | | Python基础教程(九):Lambda 函数 | [Python基础教程(九):Lambda 函数](https://blog.csdn.net/mwm0213/article/details/139573858?spm=1001.2014.3001.5501) | | Python基础教程(十):装饰器 | [Python基础教程(十):装饰器](https://blog.csdn.net/mwm0213/article/details/139577048?spm=1001.2014.3001.5501) | | Python基础教程(十一):数据结构汇总梳理 | [Python基础教程(十一):数据结构汇总梳理](https://blog.csdn.net/mwm0213/article/details/139587426?spm=1001.2014.3001.5501) | | Python基础教程(十二):模块 | [Python基础教程(十二):模块](https://blog.csdn.net/mwm0213/article/details/139602145?spm=1001.2014.3001.5501) | | Python基础教程(十三):file文件及相关的函数 | [Python基础教程(十三):file文件及相关的函数](https://blog.csdn.net/mwm0213/article/details/139612736?spm=1001.2014.3001.5501) | | Python基础教程(十四):OS 文件/目录方法 | [Python基础教程(十四):OS 文件/目录方法](https://blog.csdn.net/mwm0213/article/details/139622986?spm=1001.2014.3001.5501) | | Python基础教程(十五):面向对象编程 | [Python基础教程(十五):面向对象编程](https://blog.csdn.net/mwm0213/article/details/139640502?spm=1001.2014.3001.5502) | ❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。 ❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄 💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍 🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关推荐
nju_spy1 天前
力扣每日一题(四)线段树 + 树状数组 + 差分
数据结构·python·算法·leetcode·面试·线段树·笔试
IT小哥哥呀1 天前
MySQL慢查询优化实战:从日志分析到SQL重构全流程
mysql·性能分析·实战项目·数据库调优·sql性能·索引设计·慢查询优化
lzq6031 天前
Python虚拟环境全指南:venv与conda对比与实践
开发语言·python·conda
Candice_jy1 天前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
点心快奔跑1 天前
超详细Windows系统MySQL 安装教程
数据库·windows·mysql
流烟默1 天前
基于Optuna 贝叶斯优化的自动化XGBoost 超参数调优器
人工智能·python·机器学习·超参数优化
海琴烟Sunshine1 天前
leetcode 263. 丑数 python
python·算法·leetcode
AI视觉网奇1 天前
yolo 获取异常样本 yolo 异常
开发语言·python·yolo
程序员爱钓鱼1 天前
Python编程实战 面向对象与进阶语法 迭代器与生成器
后端·python·ipython
Neo Wordsworth1 天前
phpstudy 无法启动mysql 但命令可以启动mysql
mysql·phpstudy