python之正则表达式

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,则前两个替换,后面的不变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值