大家好,我们继续Python“正则表达式”的学习,今天的主要内容是re模块中各个方法的介绍,先做个预告,有以下几种方法。
大家准备好了吗,开始,走起。
1、match方法
match方法用于尝试从字符串的起始位置匹配一个正则表达式,如果匹配成功则返回一个match对象,如果没有匹配成功,就返回None。
pattern指的是匹配的正则表达式
string指的是用于匹配的字符串
flags是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
下面给出个例子,大家看一下。
上述代码中有一个正则表达式m,大家对照着上一篇文章,分析一下里面包含哪些语法呢,我们按顺序讲解一下:
r:表明该字符串是原始字符串,取消反斜杠\的转义功能。
():用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容,对于上述代码,所匹配的内容就是Tom和23。
\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,今天的知识点也是很多啊,大家一定要注意多读多看,自己敲每一个代码,谢谢大家的关注和阅读,也请大家多多转发,把知识传播嘛!后续还有更精彩的美文,敬请享用吧!
领取专属 10元无门槛券
私享最新 技术干货