常用内置模块(11):正则表达式、re模块

本文深入探讨Python的内置模块re,详细介绍了正则表达式的使用,包括匹配、查找、替换等核心功能,帮助读者掌握这一强大的文本处理工具。

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

 

 

 

一、正则表达式

.                 任何单个字符

[]                字符集。比如[abc]表示a、b、c

[^ ]             非字符集。比如[^abc]表示不是a或b或c的字符

\d               数字。等价于[0-9]

\w              单词字符。等价于[A-Za-z0-9_]

 

 

 

 

 

 

二、re库

2.1 常用函数

#查找

re.findall(pattern, string, flags=0)         #搜索所有匹配结果,返回列表的形式。找不到,则返回空列表。

re.search(pattern, string, flags=0)        #搜索第一个匹配的结果。返回的是Match对象。

re.match(pattern, string, flags=0)         #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。

re.finditer(pattern, string, flags=0)        #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。

 

#替换

re.sub(pattern, repl, string, count=0, flags=0)      #类似于字符串中的replace方法。替换。在string中匹配pattern,然后替换成repl。

 

#切分

re.split(pattern, string, maxsplit=0, flags=0)        #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。

 

 

 

2.1.1  re.findall()

re.findall(pattern, string, flags=0)      #搜索所有匹配结果,返回列表的形式【例1】。找不到,则返回空列表。【例2】

 

参数flags如下:

常用的就是re.I,可以忽略大小写。【例3】

 

 

【例1】

结果:

 

 

【例2】

 

结果:

 

【例3】

 

结果:

 

 

2.1.2 re.search()

re.search(pattern, string, flags=0)           #搜索第一个匹配的结果。返回的是Match对象【例1】。如果匹配不到,则返回None.【例2】

 

 

Match对象是一次匹配的结果,包含匹配的很多信息:

 

 

【例1】

 

结果:

 

【例2】

 

结果:

 

 

 

2.1.3 re.match()

re.match(pattern, string, flags=0)            #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。【例1】

 

 

例1:

 

结果:

 

 

 

2.1.4 re.finditer()

re.finditer(pattern, string, flags=0)           #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。【例1】

 

 

例1:

 

结果:

 

2.1.5 re.sub()

re.sub(pattern, repl, string, count=0, flags=0)           #类似于字符串中的replace方法,返回替换后的字符串。【例1】

 

pattern:要替换的串

repl:        替换成的串

string:     待匹配的字符串

count:     匹配的最大替换次数。【例2】

 

 

例1:

结果:

 

例2:

 

结果:

 

 

2.1.6 re.split()

re.split(pattern, string, maxsplit=0, flags=0)               #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。【例1】【例2】

 

maxsplit:   最大分割数,剩余部分作为最后一个元素输出。

 

 

例1:

 

结果:

 

例2:

 

结果:

!和空格中间有一个空字符。

 

例3:

 

结果:

 

 

 

 

2.2 re库的另一种用法

2.1中是直接使用函数。但是还有一种方法更常用,就是首先使用re.compile()函数,将正则表达式的字符串形式编译成正则表达式对象,然后再使用这个对象的函数。

这样的话,就可以一次编译,多次操作。更好一点。

 

步骤一:regex = re.compile(pattern, flags=0)

步骤二:调用regex的方法,有:

 

例:

 

结果:

 

 

2.3 贪婪匹配

如果同时匹配到长度不同的多项,返回哪一个呢?

Re库默认采用贪婪匹配,即输出匹配最长的子串。【例1】【例3】

 

如何输出最短的子串呢?【例2】【例3】

 

 • 只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配

 

 

例1:

 

结果:

 

 

例2:

 

结果:

 

 

例3:

 

结果:

 

 

2.4 分组

分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。

 

注意:group(0)是整个匹配的结果,也就是不分组时的结果。

          group(1)才是第一组的结果。

          groups()是所有组的结果,放到了一个元组中。

 

 

例如:如果想把区号从匹配的电话号码中分离,可以添加括号在正则表达式中创建分组,再使用group()方法,从一个分组中获取匹配的文本。

 

结果:

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值