1.通配符的使用
[0-9]:0到9中的任一个
[a-z]:小写字母中的任一个
[A-Z]:大写字母中的任一个
[a-zA-Z]:小写或大写字母中的任一个
glob.glob:返回所有匹配正则的路径(返回的是一个列表)
这里的 * 可以代表任意东西
?代表的是一个任意字符
glob.iglob:返回所有匹配正则的路径(返回的是一个生成器)
结果如下
2.正则表达式常用逻辑和方法
re: regular expression ====正则表达式
作用:对于字符串进行处理,会检查这个字符串内容是否与你写的正则表达式匹配,
如果匹配,拿出匹配的内容
如果不匹配,忽略不匹配的内容
findall方法
这里s.find(‘xxxx’) 打印出来的是目标在列表的次序
目标有几个就打印几次
match方法
match尝试从字符串的起始位置开始匹配
–如果起始位置没有匹配成功,返回一个None;
–如果起始位置匹配成功,返回一个对象;
返回match产生对象中的前三个字母
search方法
search会扫描整个字符串,只返回第一个匹配成功的内容;
–如果能找到,会返回一个对象,通过group方法获取对应的字符串;
这里我们看到只返回了一个kiosk
3.正则表达式特殊字符类
特殊字符类:
.: 匹配除了\n之外的任意字符; [.\n]
\d: digit–(数字), 匹配一个数字字符, 等价于[0-9]
\D: 匹配一个非数字字符, 等价于[^0-9]
\s: space(广义的空格: 空格, \t, \n, \r), 匹配单个任何的空白字符;
\S: 匹配除了单个任何的空白字符;
\w: 字母数字或者下划线, [a-zA-Z0-9_]
\W: 除了字母数字或者下划线, [^a-zA-Z0-9_]
字符 特殊字符类
这里尖角代表 ‘非’
因为r后是一个括号,所以输出是单个存在的
这里\s代表空格;
\w代表 数字 汉字 英文大小写 下划线
并且小写和大写是相反的意思
4.小练习
1.设计一个正则来找出一个字符串序列中的10-59;
2.设计一个正则来过滤一个字符串序列中只包含两个字符的字母,其中第一个是大写的A或B或C;(这里列表中元素都是两个字符组成的)
结果
5.正则表达式-指定字符出现指定次数
匹配字符出现次数:
第一种方式:
*:代表前一个字符出现0次或者无限次;
+:代表前一个字符出现一次或者无限次;
?:代表前一个字符出现1次或者0次;假设某些字符可省 略,也可以不省略的时候用;
第二种方式:
{m}:前一个字符出现m次;
{m,}:前一个字符至少出现m次;*{0,}; +={1,}
{m,n}:前一个字符出现m次到n次;?==={0,1}
结果如下
如果不满足要求则输出为空
6.匹配邮箱
要求:匹配一个qq邮箱
可以由字符数字或者下划线组成,但是不能以数字或者下划线开头;位数是6-12之间。
这里我把它写在email1.txt文件中了
文件中内容如下
6.匹配IP地址-qq号-身份证号
1.匹配ip
这里我们不难看出,d{0,2}表示零到二次,实际是不包含前面的【1-9】,所以抓取的是三位数;而如果没有d,则应表示为{0,3};并且【1-9】表示取值范围,{0,2}表示出现次数;
从qq号抓取可以明显看出
这里的pattern2和pattern3是一个意思;
身份证号的抓取,‘|’ 代表 ‘或’,这里身份证要求 17位加x或着18位或者15位;
请注意:长的要求要写在前面,否则会断章取义只截取一部分;
7.正则中需要转义的字符
因为这些字符在正则中有特殊的含义,所以必须转义:. , + , ? , *
表示分组:
(ab):将括号中的字符作为一个分组
\num:引用分组第num个匹配到的字符串
(?p):分组起别名
(AB)
首先,未分组,所以抓取的是ip的第二部分
这些都没有分组,所以抓取的都是一部分
分组后抓取的是全部,这是以整体为一组
当用search方法抓取时,只能抓取符合条件的第一个
当抓取IP地址时分组,抓取的是整个IP地址
/NUM
分组后会显示,否则不会显示
–分组起别名--
s = ‘610897199004154534’
pattern = r’(?P<注Province>\d{3})[\s-]?(?P<释City>\d{3})[\s-]?(?P<无Year>\d{4})[\s-]?’
r’(?P<意Month>\d{2})(?P<义Day>\d{2})(\d{4})’
Obj = re.search(pattern, s)
if Obj:
‘’‘’ print(Obj.groupdict())
else:
‘’‘’ print(‘Not Found’)
这是以 610 897 1990 04 15 4534来区分具体信息
输出是610:province 897:city 。。。。。
?P后跟别名
[\s-]?代表问号可有可无;
8.正则与批量替换和批量分隔符
首先我们学过split 方法
re也有split方法但这里需要转义,同时拥有替换方法
下面我们用函数来批量操作
单个操作和函数的批量操作
通过自定义函数和re的sub方法
sub还可以用来限制最大替换次数,如下
这里限制最大替换次数为2
如果大于2,则前两个替换,后面的不变