Python入门:Python3 正则表达式全面学习教程
Python入门:Python3 正则表达式全面学习教程,本文是Python3正则表达式学习教程,介绍了正则表达式的基础及Python中re模块的使用。涵盖常用匹配函数re.match()、re.search()及其区别,检索替换函数re.sub(),编译正则表达式的re.***pile(),批量匹配的findall与finditer,字符串分割的re.split(),还讲解了正则表达式修饰符和常用模式,最后总结其在多场景的应用价值,助力读者掌握正则表达式以提高字符串处理效率。
前言
Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。
🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。
🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。
🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。
🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。
🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。
🌐 前篇文章咱们练习了 Python3基础练习题详解,从入门到熟练的 25 个实例(八) ,如果忘记了,可以去重温一下,不停的重复敲击基础代码,有助于让你更加熟练掌握一门语言。今天咱们继续学习 ,Python3 正则表达式全面学习教程,下面开始吧!
正则表达式是处理字符串的强大工具,它能帮助我们快速检查字符串是否与特定模式匹配、提取关键信息或进行复杂替换。在Python中,re模块提供了完整的正则表达式支持,本文将详细介绍Python3中正则表达式的使用方法。
一、正则表达式基础
正则表达式是由特殊字符序列组成的模式,用于描述字符串的匹配规则。例如,我们可以用正则表达式快速验证邮箱格式、提取网页中的链接等。
在Python中使用正则表达式,首先需要导入re模块:
import re
二、常用匹配函数
1. re.match()
re.match()函数尝试从字符串的起始位置匹配模式,如果起始位置匹配失败,则返回None。
语法:
re.match(pattern, string, flags=0)
参数说明:
-
pattern:要匹配的正则表达式 -
string:待匹配的字符串 -
flags:标志位,用于控制匹配方式(如大小写不敏感)
示例:
import re
# 起始位置匹配成功
print(re.match('xcleigh', 'xcleigh.blog.csdn.***').span()) # 输出:(0, 7)
# 非起始位置匹配失败
print(re.match('***', 'xcleigh.blog.csdn.***')) # 输出:None
控制台输出
匹配成功后,可通过匹配对象的方法获取结果:
-
group(num=0):返回匹配的子串,num=0表示整个匹配结果,指定组号可返回对应分组内容 -
groups():返回所有分组匹配结果的元组 -
span():返回匹配结果的起始和结束索引
2. re.search()
re.search()函数扫描整个字符串,返回第一个成功的匹配,无论是否在起始位置。
语法:
re.search(pattern, string, flags=0)
示例:
import re
# 起始位置匹配
print(re.search('xcleigh', 'xcleigh.blog.csdn.***').span()) # 输出:(0, 3)
# 非起始位置匹配
print(re.search('***', 'xcleigh.blog.csdn.***').span()) # 输出:(11, 14)
控制台输出
3. re.match与re.search的区别
-
re.match仅从字符串起始位置匹配,不匹配则返回None -
re.search扫描整个字符串,返回第一个匹配结果
示例:
import re
line = "Cats are smarter than dogs"
# match匹配'dogs'失败(不在起始位置)
matchObj = re.match(r'dogs', line, re.I)
print(matchObj) # 输出:None
# search匹配'dogs'成功
searchObj = re.search(r'dogs', line, re.I)
print(searchObj.group()) # 输出:dogs
控制台输出
三、检索与替换:re.sub()
re.sub()用于替换字符串中的匹配项,是处理文本替换的常用函数。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数说明:
-
pattern:匹配模式 -
repl:替换的字符串或函数 -
string:待处理的原始字符串 -
count:最大替换次数,默认0表示替换所有 -
flags:匹配标志
示例1:基础替换
import re
phone = "133-2233-4455 # 这是一个电话号码"
# 删除注释
num = re.sub(r'#.*$', "", phone)
print("电话号码 : ", num) # 输出:133-2233-4455
# 移除非数字内容
num = re.sub(r'\D', "", phone)
print("电话号码 : ", num) # 输出:13322334455
控制台输出
示例2:使用函数作为替换值
import re
# 将匹配的数字乘以2
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub(r'(?P<value>\d+)', double, s)) # 输出:A46G8HFD1134
控制台输出
四、编译正则表达式:re.***pile()
re.***pile()用于编译正则表达式,生成Pattern对象,可提高多次匹配的效率。
语法:
re.***pile(pattern[, flags])
示例:
import re
# 编译匹配数字的正则表达式
pattern = re.***pile(r'\d+')
# 使用编译后的对象进行匹配
m = pattern.match('one12twothree34four', 3, 10)
print(m.group()) # 输出:12
print(m.span()) # 输出:(3, 5)
控制台输出
Pattern对象的常用方法与re模块的函数对应,如match()、search()、findall()等。
五、批量匹配:findall与finditer
1. re.findall()
返回字符串中所有匹配的子串,以列表形式呈现。
语法:
re.findall(pattern, string, flags=0)
# 或使用编译后的对象
pattern.findall(string[, pos[, endpos]])
示例:
import re
# 查找所有数字
result1 = re.findall(r'\d+', 'xcLeigh 123 csdn 456')
print(result1) # 输出:['123', '456']
pattern = re.***pile(r'\d+')
result2 = pattern.findall('xcL88eigh123csdn456', 0, 100)
print(result2) # 输出:['88', '1']
控制台输出
2. re.finditer()
与findall()类似,但返回一个迭代器,适合处理大量匹配结果。
示例:
import re
it = re.finditer(r"\d+", "12a32bc43jf3")
for match in it:
print(match.group()) # 依次输出:12、32、43、3
控制台输出
六、字符串分割:re.split()
re.split()根据匹配的子串分割字符串,返回分割后的列表。
语法:
re.split(pattern, string[, maxsplit=0, flags=0])
示例:
import re
# 按非单词字符分割
print(re.split(r'\W+', 'xcleigh, xcleigh, xcleigh.'))
# 输出:['xcleigh', 'xcleigh', 'xcleigh', '']
# 保留分割符
print(re.split(r'(\W+)', ' xcleigh, xcleigh, xcleigh.'))
# 输出:['', ' ', 'xcleigh', ', ', 'xcleigh', ', ', 'xcleigh', '.', '']
# 限制分割次数
print(re.split(r'\W+', ' xcleigh, xcleigh, xcleigh.', 1))
# 输出:['', 'xcleigh, xcleigh, xcleigh.']
控制台输出
七、正则表达式修饰符
修饰符用于控制匹配模式,可单独使用或通过|组合使用。
| 修饰符 | 描述 |
|---|---|
| re.IGNORECASE (re.I) | 忽略大小写 |
| re.MULTILINE (re.M) | 多行模式,使^和$匹配每行开头和结尾 |
| re.DOTALL (re.S) | 使.匹配包括换行符在内的所有字符 |
| re.ASCII | 限制\w等元字符仅匹配ASCII字符 |
| re.VERBOSE (re.X) | 忽略正则中的空格和注释,提高可读性 |
示例:忽略大小写
import re
pattern = re.***pile(r'apple', flags=re.IGNORECASE)
result = pattern.match('Apple')
print(result.group()) # 输出:Apple
控制台输出
八、常用正则表达式模式
正则表达式由普通字符和特殊元字符组成,以下是常用模式:
| 模式 | 描述 |
|---|---|
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
. |
匹配任意字符(除换行符,re.S模式下包含换行符) |
[...] |
匹配括号内任意字符 |
[^...] |
匹配不在括号内的任意字符 |
* |
匹配前面的表达式0次或多次 |
+ |
匹配前面的表达式1次或多次 |
? |
匹配前面的表达式0次或1次(非贪婪模式) |
{n} |
匹配前面的表达式n次 |
{n,} |
匹配前面的表达式至少n次 |
{n,m} |
匹配前面的表达式n到m次 |
| |
匹配左右任意一个表达式 |
(...) |
分组匹配,可通过group(num)获取 |
\w |
匹配字母、数字、下划线 |
\W |
匹配非字母、数字、下划线 |
\s |
匹配空白字符(空格、制表符等) |
\S |
匹配非空白字符 |
\d |
匹配数字 |
\D |
匹配非数字 |
示例:分组匹配
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)
print(matchObj.group(1)) # 输出:Cats
print(matchObj.group(2)) # 输出:smarter
九、总结
本文介绍了Python3中re模块的核心功能,包括match()、search()、sub()、***pile()等常用函数,以及正则表达式的修饰符和模式语法。掌握正则表达式能极大提高字符串处理效率,在数据清洗、文本分析、爬虫开发等场景中都有广泛应用。
建议结合实际需求多做练习,熟练掌握各种模式的组合使用,以应对复杂的字符串处理任务。
💡下一篇咱们学习 Python入门:Python3 CGI编程全面学习教程!
附录:扩展学习资源
-
官方资源:
- Python官网:https://www.python.org
- PyPI:https://pypi.org(查找第三方库)
- 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.***/s/649af731037c
- 学习资料视频和文档资源,网盘下载地址: https://pan.quark.***/s/ee16901a8954
-
本专栏特色资源:
- 代码资源仓库:CSDN专属资源在线获取
- 海量Python教程:关注公众号:xcLeigh,获取网盘地址
-
一对一答疑:添加微信与博主在线沟通(
备注“Python专栏”)
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🏰 大屏可视化 🌀 带你体验酷炫大屏!
💯 神秘个人简介 🌀 带你体验不一样得介绍!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.***/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌