正则的详细讲解之模块用法与贪婪模式(六)

模块的高级用法

模块的高级用法
前面我们说过,我们正则匹配时,会先匹配出一个对象,然后对这个对象进行匹配。
Pattern 对象的一些常用方法主要有:
· match 方法:从起始位置开始查找,一次匹配
· search 方法:从任何位置开始查找,一次匹配
· findall 方法:全部匹配,返回列表
· finditer 方法:全部匹配,返回迭代器
· split 方法:分割字符串,返回列表
· sub 方法:替换

下面我们来详细介绍这些方法:

match 方法

match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。
语法:match(string[, pos[, endpos]])
string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部。当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

注:match里面有默认参数,我们不填写就是匹配头部字符,我们可以选择匹配字符的位置
在这里插入图片描述
在上面,当匹配成功时返回一个 Match 对象,其中:
group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
在这里插入图片描述

search方法

search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。
语法:search(string[, pos[, endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。
在这里插入图片描述
有例子可以看出,match只是匹配开头,但是seatch是匹配所有字符,找到合适的就返回,哪怕后面再有也不匹配了。

findall方法

上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。
findall(string[, pos[, endpos]])
在这里插入图片描述
findall匹配返回的是个列表,而且是搜索整个字符串,获得所有匹配的结果。而且,我们一般用findall的比较多,比如:在接口自动化中,去匹配接口返回的值,就可以用findall,可以返回所有的值。

finditer 方法

finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。
在这里插入图片描述

sub 方法

sub 方法用于替换。
语法:sub(repl, string[, count])
· 如果 repl 是字符串,则会使用 repl 去替换字符串每一个匹配的子串,并返回替换后的字符串,另外,repl 还可以使用 id 的形式来引用分组,但不能使用编号 0;
· 如果 repl 是函数,这个方法应当只接受一个参数(Match 对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count 用于指定最多替换次数,不指定时全部替换。
在这里插入图片描述

split 方法

split 方法按照能够匹配的子串将字符串分割后返回列表。
语法:split(string[, maxsplit])
其中,maxsplit 用于指定最大分割次数,不指定将全部分割。
在这里插入图片描述

贪婪和非贪婪模式

python的re模块里面的数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符。
非贪婪则相反,总是尝试匹配尽可能少的字符。
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
有时,贪婪并非是好事,有时我们不需要那么多,这时就把贪婪变成非贪婪模式
在这里插入图片描述
第一个是贪婪的,数字都匹配,第二个是不贪婪的,只匹配一个数字。
我们工作中也经常用到贪婪的模式,不如爬虫爬取网站图片时,我们只想要第一个url,还有匹配json时,只要第一个key-valus等等

总结

正则使用是灵活的,我们要想很熟练的运行,需要多用。我们用正则时,一般都是匹配字符、数量、分组、边界、匹配方法以及贪婪模式一起运用的。

注:以上仅个人见解,如有不对,请指正,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值