2021年07月03日 23:50 __ _ _ _ _

文章配图

除了自己的判断之外,没有人可以给我一条或者一系列内幕消息让我不停挣钱。我花了5年时间才学会如何聪明地玩游戏,让我在自己判断正确的时候挣到大钱。

——《股票大作手回忆录》

文章配图

昨天写了关于正则表达式的raw string原生字符串和相关函数的用法,那么关于正则库中函数的其它用法是否能引起你注意呢?

正则表达式目录:

  1. 函数扩展用法

  2. 正则的贪婪匹配和最小匹配

1.函数扩展用法

在Python爬虫中,正则库中函数的用法有另外一种等价方法,被称为 一次性用法 。 比如:

match=re.search(r'[1-9]\d{5}' , 'BIT 100081')

面向对象用法:编译后的多次操作。 比如:

pat=re.compile(r'[1-9]\d{5}') match=pat.search('BIT 100081')

那么,如何将正则表达式形式编译成正则表达式对象? 比如:

regex=re.compile(pattern,flags=0)#实例:regex=re.compile(r'[1-9]\d{5}')

这里提到了match对象, RE库的match对象:一次匹配的结果 。 比如:


import rematch=re.search(r'[1-9]\d{5}' , 'BIT 100081')if match:    print(match.group(0))print(type(match))#查看match的类型

运行结果:

文章配图

那么与Match对象的 属性以及说明

属性: 说明:
.string 待匹配的文本
.re 匹配时使用的pattern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置

与Match对象的 方法以及说明

Match对象的方法: 说明:
.group(0) 获得匹配后的字符串#还有group(1),group(2)等
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串发结束位置
.span() 返回(.start(),.end())

如下是对上述属性以及方法的实例:


import rem=re.search(r'[1-9]\d{5}','BIT100081 TSU100084')print(m.string)print(m.re)print(m.pos)print(m.endpos)print(m.group(0))print(m.start())print(m.end())print(m.span())

运行结果:

文章配图

2.贪婪匹配和最小匹配

Re库默认采用贪婪匹配(尽可能多的匹配数据),即输出匹配最长发子串。 比如:


import rematch=re.search(r'PY.*N','PYANBNCNDN')print(match.group(0))

运行结果:

文章配图

那么我们该如何得到 **最小匹配 对于可能得到的匹配多于期望的匹配的情况,最小匹配是必要的 ** 呢? 比如:


import rematch=re.search(r'PY.*?N','PYANBNCNDN')print(match.group(0))

运行结果:

文章配图

在最小匹配中,经常会用到 最小匹配操作符 ,关于一些相关的方法小编在这里给大家已列出:

操作符 说明
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n}? 扩展前一个字符m至n次,最小匹配

关于更多爬虫的用法,还待后续…

文章配图

文章配图

为你,千千万万遍.

往期推荐:

Python爬虫系列:正则表达式(2) 2021-07-02
文章配图

六月碎碎念 || 半年已逝 2021-07-01
文章配图

【算法系列02】整数二分怎么玩? 2021-06-01
文章配图

一键三连,就差你了
文章配图

预览时标签不可点

阅读




__