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

一、正则表达式

.                 任何单个字符

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

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

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

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

19bb17dde7166512b1d6a292e84ac4d7.png

e42749b69de5ceccf351c515f50477c8.png

二、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如下:

ed16c802570a2b528a221a653138a1f2.png

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

【例1】

85aa99ab63bee63660f4430e1d0b8b60.png

结果:

e47a47ac7b0cd00dd4ee7dbea47a7c16.png

【例2】

a839e942a3d2bff20ba3e83265bf1417.png

结果:

4d8c66ebc1987137aca39918651c12f4.png

【例3】

4791f1b640e24e1b6cde1e99e6979894.png

结果:

74dd2e03ff33c8739ac35f1232320643.png

2.1.2 re.search()

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

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

b6c52e21daf95d789086359734153a15.png

5853c9b3734e44ab5290634aba395115.png

【例1】

96a4884a5504cadfafeded4888b787da.png

结果:

12593e4d0d7469df6111bbca8143bcc0.png

【例2】

0b9f6cc2bcae10c1db1fac2d372d8429.png

结果:

759a087bb90ba227c7475ad524a29b33.png

2.1.3 re.match()

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

例1:

2d633a7a9798bf6e2b5d77d577c20425.png

结果:

274e830ded2ce634b702940547a69211.png

2.1.4 re.finditer()

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

例1:

4d2772c4868fad7eff15a59ef829908a.png

结果:

2aa41ac80e340cab33de39475f6519ac.png

2.1.5 re.sub()

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

pattern:要替换的串

repl:        替换成的串

string:     待匹配的字符串

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

例1:

b8765ebc7fc7a35c4494d1dd392167fd.png

结果:

178c31459cc7bece2a7836dddb1f804a.png

例2:

5b2e45bc4a66370a8dd115dbe59e3cd9.png

结果:

0841dd96d442cfcb937f27a7aefa3f9b.png

2.1.6 re.split()

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

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

例1:

33d84acd4f16c5a17651da43c0cfa9d8.png

结果:

75bc14bcdfb9e642bd5e04853591ed05.png

例2:

4e5a4bc7884e562cd679c77138fba49e.png

结果:

ab77a7d9667fec8af9071b7ac38823f1.png

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

例3:

1ad082b3e081151db2a51e354f96751a.png

结果:

9a4b831088859e4b334e95620f01f911.png

2.2 re库的另一种用法

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

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

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

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

916f2c4ca7d8b83cc993928f0d2495fb.png

例:

ba52061a15160ad89aacc4f3d92f9202.png

结果:

72a62c8feeec7a5ddf766c38881b4108.png

2.3 贪婪匹配

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

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

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

cca6ac6e3d0dd595f0e5cbb2423967da.png

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

例1:

28258c75a39db33de6e11155d00833e0.png

结果:

0c8dd0a268a6453e562f351f55d2a186.png

例2:

46a6d61730f42bc19d128de30f44f05d.png

结果:

ef7a94e2b269787fc059db39eb033655.png

例3:

67b86a03ecbaa178f1f9387824c4d95b.png

结果:

cb83d99490e4f97e032cd7f53559bc3e.png

2.4 分组

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

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

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

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

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

17113d3053f1c61f5eda237a35c081ba.png

结果:

2b122058ef062204505b4d106f48de8f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值