首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python“正则表达式”详解(下)

大家好,我们继续Python“正则表达式”的学习,今天的主要内容是re模块中各个方法的介绍,先做个预告,有以下几种方法。

大家准备好了吗,开始,走起。

1、match方法

match方法用于尝试从字符串的起始位置匹配一个正则表达式,如果匹配成功则返回一个match对象,如果没有匹配成功,就返回None。

pattern指的是匹配的正则表达式

string指的是用于匹配的字符串

flags是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

下面给出个例子,大家看一下。

上述代码中有一个正则表达式m,大家对照着上一篇文章,分析一下里面包含哪些语法呢,我们按顺序讲解一下:

r:表明该字符串是原始字符串,取消反斜杠\的转义功能。

():用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容,对于上述代码,所匹配的内容就是Tom23

\w:匹配任意字母数字及下划线,等价于[a-zA-Z0-9_],在上述代码中第一个括号中的模式表示的是一个名字,名字只能由字母数字及下划线构成。

+:用于将前面的模式也就是\w匹配一次或多次(贪婪模式)。

\d:匹配任意数字,等价于[0-9],第二个括号中的模式表示的是年龄,年龄当然必须得是数字了。

:用于将前面的模式也就是\d匹配1次到3次,也就是0到999,除了千年乌龟万年鳖,这个年龄范围应该够用了。

大家看看,这些语法其实都是简单的知识点,不过要把这些知识点组合起来为我所用,就需要不断修炼了。match方法第一个参数是匹配的正则表达式,第二个参数是用于匹配的字符串,第三个参数不用管,我们之后再讲。执行完match方法后返回一个SRE_MATCH对象,我们可以用help方法先看看该对象是何方神圣。

SRE_MATCH对象是match方法和search方法的返回结果,我们继续看看该对象包含哪些属性方法。

group方法用于通过索引或名字返回匹配的子分组,也就是()中的那些模式,当参数为0时返回整个匹配。

end方法用于返回匹配子串的结束位置,start用于返回匹配子串的开始位置,span方法用于以元祖形式返回匹配的开始和结束位置,参数group默认为0,表示整个匹配,可以根据需要设置为其他值,不过不要超过匹配的子分组的个数。

不知道大家注意到没有,我们在上文中提到过group方法用于通过索引或名字返回匹配的子分组,可我们现在只会用索引,那名字怎么使用呢,至今也没有看到匹配的名字啊!这涉及到一个稍微高级点的知识点,给大家讲一下。

(?P...)也是正则表达式的语法,通过该方式,匹配的子分组就可以通过name来访问了,OK,现在改写一下之前用到的那个正则表达式。

这样是不是更直观了呢!

2、fullmatch方法和search方法

match方法是从字符串的开始进行匹配,而fullmatch方法是试图匹配整个字符串,search方法是从整个字符串中寻找与正则表达式相匹配的字符串。什么意思呢?我们看一下例子。

说白了,match方法和search方法的区别就在于,前者是从字符串开始进行匹配,匹配不上就返回None,而search从字符串开始一直向后寻找,直到找到匹配的子串。fullmatch方法其实不太实用,因为它要求正则表达式必须要能匹配整个字符串,而不是字符串的一部分

3、sub方法与subn方法

sub方法试图用参数repl替换与正则表达式pattern相匹配的子串,其中repl可以是一个字符串也可以是一个函数,如果是函数的话,必须要返回一个用于替换的字符串。OK,我们看一个例子。

正则表达式m用于匹配字符串中的数字,repl是一个空格,执行完sub方法后,字符串中的数字全部被空格所代替。我们再看一下repl是函数的例子。

结合上一张图片看,是不是字符串里的数字都被加1了呢。

subn方法与sub方法类似,只是在返回值中多了个匹配的数量,以元祖形式返回,如下图所示。

4、split方法

split方法用于通过匹配的子串将字符串分割,并将分割后的子串以列表形式返回,参数maxsplit表示最大分割的次数,默认为0,表示不限次数,一般情况下不用管它。OK,我们看一个例子。

5、findall方法和finditer方法

findall方法返回字符串中所有非重叠匹配的列表,理解的时候可与search方法对比一下,search方法只返回寻找到的第一个匹配,而findall方法返回所有非重叠的匹配,如果正则表达式中包含一个或多个group,则以列表形式返回所有的group。OK,先看个例子吧!

从上述代码中可以知道,search方法只匹配到23,而findall将字符串中所有的数字都匹配到,并以列表形式返回,OK,再看一个正则表达式中包含有一个或多个group的例子。

finditer方法与findall方法类似,只不过finditer方法返回的是包含所有匹配对象的列表。

6、compile方法

compile方法用于编译一个正则表达式,并生成一个模式(pattern)对象。

pattern对象可以干什么呢?我们看看它包含哪些方法。

我们发现,这些方法其实刚刚才学完,只不过用模式对象调用的时候,参数里面没有正则表达式pattern罢了。

本次课程快结束了,我们再讲一个知识点,就是上述各个方法里面的一个参数flags,它是干什么用的呢?我们先看看flags包含哪些值。

由于篇幅关系,在此只讲一个,剩下的大家自己去研究一下,有不懂的再问我。当flags参数为I或IGNORECASE时,匹配会忽略大小写。

OK,今天的知识点也是很多啊,大家一定要注意多读多看,自己敲每一个代码,谢谢大家的关注和阅读,也请大家多多转发,把知识传播嘛!后续还有更精彩的美文,敬请享用吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180731G0830800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券