Python正则表达式模块—re

本文介绍了正则表达式的概念,展示了如何在Python中使用match,search,sub和split函数进行字符串匹配、查找、替换和分割,以及实际应用场景如邮箱验证和数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式指预先定义好一个“字符串模板”,通过这个“字符串模板”可以匹配、查找和替换那些匹配“字符串模板”的字符串。

正则表达式的字符含义,推荐Python正则表达式最强整理(速查手册,记得收藏)-优快云博客

1字符串匹配

字符串匹配指验证一个字符串是否符合指定的“字符串模板”,常用于用户输入验证。例如:用户注册时需要填写邮箱,验证邮箱是否有效输入,就需要用到字符串匹配验证。

使用match(p, text)函数进行字符串匹配, 其中的参数p是正则表达式,即字符串模板, text是要验证的字符串。 如果匹配成功,则返回一个Match对象(匹配对象),否则返回None。

示例:

import re
p=r"\w+@QQ\.com"  #验证邮箱的正则表达式
email1='123456yy@QQ.com' #待验邮箱
m=re.match(p,email1) #返回非空,则匹配成功
email2='123456yy@163.com'
y=re.match(p,email2)
type(m) #非空
type(y) #空
print(m,y)

由上述结果可以看出,邮箱1与输入的正则表达式匹配成功,其中span表示字符串跨度,邮箱2未成功。 并且上述代码采用了原始字符串r"\w+@QQ\.com"表示,若用普通字符串表示,需要将特殊字符转义,表示为"\\w+@QQ\\.com",而正则表达式本身会存在较多(\),因此用普通字符串表示会比较麻烦,所以一般使用原始字符串表示。

2.字符串查找

字符串查找指从一个字符串中查找匹配正则表达式的子字符串, 常用于数据分析、 网络爬虫等数据处理中。
常用的字符串查找函数如下。
search(p text): 在text字符串中查找匹配的内容,如果找到,则返回第1个匹配的Match对象,否则返回None。 p是正则表达式。
findall(p, text):在text字符串中查找所有匹配的内容,如果找到,则返回所有匹配的字符串列表; 如果一个都没有匹配,则返回None。p是正则表达式。

示例:

import re
p=r"\w+@QQ\.com"
my_email1='my email is 123456yy@QQ.com'
m=re.search(p,my_email1)
he_email2='he email is 123456yy@163.com'
y=re.search(p,he_email2)
ROY=r'Roy|roy|ROY' #(|)表示或
text='Roy is a singer,a writer,I like Roy,roy and ROY '
m2=re.findall(ROY,text)
print(m,y,m2,sep="\n")

由结果可以看出,第一个匹配成功,并且显示匹配成功字符串的位置是(12,27),第二个匹配失败,第三个将text中的重复项全部输出。 

3.字符串替换

正则表达式的字符串替换函数是sub(),该函数替换匹配的子字符串,返回值是替换后的字符串,其语法格式如下:

re.sub(p,repl,string,count=0)

其中,参数p,repl,string,count分别表示:正则表达式,用于替换的新字符串,即将被替换的旧字符串,和最大替换数量,默认是0,表示不限制替换数量。

示例:

import re
p=r'\d+'
text='a123b456c789'
repl_text1=re.sub(p,'',text)
repl_text2=re.sub(p,'',text,count=1)
repl_text3=re.sub(p,'',text,count=3)
print(repl_text1,repl_text2,repl_text3,sep="\n")
#abc
#ab456c789
#abc

4.字符串分割

re模块中的split()函数可以进行字符串的分割,其语法格式如下:

re.split(p,string,maxsplit=0)

其中参数p,string,maxsplit分别表示:正则表达式、要分隔的字符串、最大分隔次数,默认是0,即表示没有限制。

import re
p=r'\d+'
text='a123b456c789'
sp_text1=re.split(p,text)
sp_text2=re.split(p,text,maxsplit=1)
sp_text3=re.split(p,text,maxsplit=2)
print(sp_text1,sp_text2,sp_text3,sep="\n")
#['a', 'b', 'c', '']
#['a', 'b456c789']
#['a', 'b', 'c789']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Roy Teng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值