2019/10/30 04-Python的re模块使用

在这里插入图片描述
基本不用
在这里插入图片描述在这里插入图片描述
如果想要多行和单行同时打勾,就需要用|或运算符
在这里插入图片描述
re模块会对模式进行编译(一般模式写的正则表达式都不怎么会进行修改),编译之后使用,效率更高,在项目使用中必须先编译,先把正则表达式用这个引擎先compile,编译之后得到一个正则表达式对象,这个对象就是关于python的,关于正则表达式的,下面就可以对字符串进行操作了,
python提供两套做法,一套编译后的做法,一套非编译后的做法(正则表达式使用都会编译的,编译就是避免反复编译,提高速度)

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
先写一个字符串测试一下
第一个函数match,有三个参数(pattern,string,flags(标志,单行多行这些东西,忽略大小写)

在这里插入图片描述在这里插入图片描述
如果是多个的这么写即可,知道这么用即可
在这里插入图片描述

现在准备这么做,matcher匹配对象,没找到在这里插入图片描述
一个区间0和1.这个索引放到切片里刚好能切除它来,但是现在只找到一个
在这里插入图片描述
找下o,找不到在这里插入图片描述
bot在0到3的区间范围内在这里插入图片描述在这里插入图片描述
这里还有flags在这里插入图片描述
编译后的对象拿到后,再match
这是两种写法,只要写个string即可

在这里插入图片描述
这两个是先编译后编译的问题在这里插入图片描述
先编译得到对象,得到这个正在表达式对象,下面就去匹配,这个是手动编译一下
在这里插入图片描述
这个是你要找谁,然后去test里去找,
在这里插入图片描述
其实也是编译的,用这个方法就是内部要去编译
在这里插入图片描述
可以模式不变到其他字符串里面去找
在这里插入图片描述
这两种方式其实是一样的,只不过下面的是先手动编译,然后做匹配,上面的是内部编译
在这里插入图片描述
会把你匹配的pattern,这个patter就是你写的正则表达式进行编译
在这里插入图片描述
这么写只匹配b在这里插入图片描述在这里插入图片描述
总结:match不管你怎么写,根本不关心你里面怎么写
如下面虽然是多行但是还是没什么变化,在这里插入图片描述
总结:match不管你多行单行,只从索引为0的开始
在这里插入图片描述
这个match,告诉你匹配了多少字符串在这里插入图片描述在这里插入图片描述
多行模式不管,只匹配到一个就结束了,不但匹配一个而且要求索引从0开始
我们之前练习的工具是全局的,match要求从索引0开始,如果索引0都匹配不上,后面就不用匹配了

在这里插入图片描述
单行模式
python也需要按照标准来,只有命名分组要注意语法不一样

在这里插入图片描述
看看match还有什么
在这里插入图片描述
还有pos,endpos在这里插入图片描述
如何理解pos和endpos
从1开始逢8转行,索引匹配上,1开始,1-1
在这里插入图片描述在这里插入图片描述位置7就取出了bag,说明这个位置可以调在这里插入图片描述
写成11就是big
在这里插入图片描述在这里插入图片描述
这个参数里就没有调整位置的
在这里插入图片描述
match只匹配一次但是必须从开头开始,开头跟指针有关,如果挪动pos,指针就跑了

match两种用法,编译后用,不编译用
search搜索

在这里插入图片描述
search找到第一个匹配之后就停止了,就不再继续搜索了
在这里插入图片描述
这两个方法用哪个都行
在这里插入图片描述
推荐这样的写法,应该先编译
在这里插入图片描述
match都是从开头开始,但是search就可以加^秃子符了
现在整好从1开始找到bottle了

在这里插入图片描述
调整一下就找不到了,在普通模式下,行首指的是最前面这个地方,指针指向1,就不是b开头的 在这里插入图片描述
编译时传一下,re.M多行,正则表达式一定要测试,因为方言的原因各个都不一样
现在就有多行了,秃子符就在行首,找到第二行了,search就不往下找了
search跟match一样找到就算了,不找了,match是锚定开头
search从你指定的位置向后找,如果找到就返回第一个匹配,第二个就不找

在这里插入图片描述
看下这后面能否起作用
,serch没有这个功能接收
在这里插入图片描述
serch没有这个功能接收
在这里插入图片描述
只能在compile编译的里面
在这里插入图片描述
编译完之后得到对象,然后search在这里插入图片描述
正则表达式的编译还是比较耗时的,经常使用,建议使用编译后的对象调方法做,而不是一上来先写完,每次执行编译一次,特别浪费时间
这一块写的时候就需要特别注意
在这里插入图片描述
这就是search的行为,从你指定的位置开始向后找,但是找到第一个就返回了,没找到只能告诉你没有匹配到,返回一个none
这时候写什么开头和结尾就要按照什么多行单行来理解

search是从你指定的位置开始,向后找,找第一个匹配
在这里插入图片描述
这些都属于单词匹配
在这里插入图片描述
match是锚定开头的的,也可以在编译对象指定开始结束位置
在这里插入图片描述
1到4就找不到在这个范围里

在这里插入图片描述
在这里插入图片描述
意思在于full
在这里插入图片描述
full的意思是要把整个字符串指定的区域都算在内
在这里插入图片描述
加L虽然贪婪但是遇到L就停止了,这就不是fullmatch,差一个字符都不行在这里插入图片描述
fullmatch既然是全部匹配,那匹配一小部分肯定不行的,只要不是匹配的所谓全长就出问题了
在这里插入图片描述
你这个匹配不带换行符\n,是匹配不上的在这里插入图片描述
这个就是前包后不包,是可以完全匹配上的在这里插入图片描述
这样应该就能匹配了
在这里插入图片描述
完全匹配就是,应该把你给的正则表达式,把你给定的子串里面的所有字符全部用到,这才叫full,这个叫完全匹配。其实就看下,左索引和右索引完全一致就是完全匹配了

match必须从头匹配,或者从指定的位置,不要求完全匹配,匹配上就行在这里插入图片描述
search从你指定的地方找到第一个就停了
在这里插入图片描述
锚定开头和结尾必须一样,字符串多长全匹配上,fullmatch使用的很少,
在这里插入图片描述在这里插入图片描述在这里插入图片描述
多行模式下,托字符还是有用的在这里插入图片描述
fullmatch,是前包后不包在这里插入图片描述
match搞定的就是想象的search,从某个位置开始开始
在这里插入图片描述

全文搜索

在这里插入图片描述
单行的就把所有的匹配在这里插入图片描述
这个是立即返回一个列表,列表放的是匹配的值在这里插入图片描述
确定了里面全是字符串,findall是从当前字符串的,开头向后search,找到第一个不行,还要向后找一直找到结尾,把所有能匹配的项,转成字符串封装到列表在这里插入图片描述
看看re.compile先编译一下,编译后也有findall在这里插入图片描述
这个字符串想要从哪里到哪里查
在这里插入图片描述
立即返回列表,里面是匹配的字符串 在这里插入图片描述
search是返回的match对象
在这里插入图片描述
这个要编译,需要指定字符串
在这里插入图片描述
这个是一个迭代器
在这里插入图片描述
next一下转一下
findall是立即返回一个列表,里面 匹配的是字符串
finditer的方法可以拿到里面的每一次匹配对象,匹配对象带分组
(如果说仅仅匹配的东西就是你想要的,实际上可以不用这个)

在这里插入图片描述
findall,一个立即返回列表,里面是字符串,finditer是返回迭代器,迭代出的每一个都是match对象

全文搜索两套方法,1立即求值
2,返回迭代器,逐次迭代的

在这里插入图片描述在这里插入图片描述在这里插入图片描述

替换的方法

在这里插入图片描述
这里可以模式替换,还可以指定多少次,字符串的replace的就做不到

\w代表字符,数字,下划线
(模式,替换的字符,对什么操作)

在这里插入图片描述
不想换行也很简单,看的清楚一点,替换之后是新的字符串
在这里插入图片描述
count缺省值是0,(是遇到几个替换几个)
在这里插入图片描述
1就替换一次
在这里插入图片描述
上限100,但是都在这里插入图片描述
这是两个版本,详细的,先编译后编译在这里插入图片描述在这里插入图片描述
subn是,切完之后返回的是一个元组,n代表替换了n次
在这里插入图片描述
模式替换,现在pattern模式里面,能替换的就替换了,但是string的replace就不可以在这里插入图片描述在这里插入图片描述
以前只能这么切,后面的\n就没办法
字符串的split能力太弱
在这里插入图片描述
用正则表达式,可以先把\s切割一下
在这里插入图片描述
为什么会出现这个,是按照一个字符一个字符来切的,碰到\n切一刀,\t切一刀
在这里插入图片描述在这里插入图片描述
默认情况下是按照\s+切的,空白字符+切的
其实大多数工具都是用的\s+作为分隔符
在这里插入图片描述
现在是要把bag提取出来,旁边的()还在
在这里插入图片描述
这样就搞定了
在这里插入图片描述
把每行的单词提取出来
在这里插入图片描述
现在这样切出来是这个样子
在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个就是个特例
在这里插入图片描述
这样也可以
在这里插入图片描述
因为这里切一刀免不了有个缺点
在这里插入图片描述在这里插入图片描述
如果切出来空,循环的时候可以判断,这样也比我们之前处理字符串split要方便在这里插入图片描述在这里插入图片描述
分组,加一个小括号即可,(?:)这样分组就不存在了,(?P<)命名分组,python加P,还有断言在这里插入图片描述
这样就可以了
str,一个字符串就没有分组

在这里插入图片描述
应该使用finditer,得到的结果在match对象中
在这里插入图片描述
套了括号就肯定有分组,每个match对象都有分组,一定要是match对象才有分组在这里插入图片描述
match对象的分组就是自己,因为把自己包进去了在这里插入图片描述
match匹配一次,里面有一个分组是b在这里插入图片描述在这里插入图片描述在这里插入图片描述
finditer会返回match,match里面才能拿到group,match和group并不一致,要看你的括号在哪里

这样拿到一个可迭代对象results在这里插入图片描述
有时候想要的不是match而是分组
在这里插入图片描述
如果写的是断言出来的就是直接想要的,可以不用分组,直接match结果可以用,直接用findall即可

groups看名字就是打印所有分组,results是返回的迭代器,不能直接groups,match对象才能groups在这里插入图片描述

使用search试试,结果肯定是一个
在这里插入图片描述
groups还是bottle
在这里插入图片描述在这里插入图片描述
group后面可以接受参数,分组从1 开始在这里插入图片描述在这里插入图片描述在这里插入图片描述
0代表matcher,1代表分组号在这里插入图片描述
0是跟你分组没有关系,0是匹配
在这里插入图片描述
现在没有分组,输入1就肯定报错在这里插入图片描述在这里插入图片描述
加了问号就分组彻底没了
在这里插入图片描述
命名分组,python要加P在这里插入图片描述在这里插入图片描述
试试命名分组有什么用
在这里插入图片描述
只要有分组都算groups,有分组都可以按groups来,只要有命名分组才进dict里,没有命名就不用进dict了,所有的分组都可以在groups里用,这个group都可以用索引的,分组是有分组号的,一定是用索引的
0指的是匹配
分组能给你返回一个字典
在这里插入图片描述在这里插入图片描述
encode可以看到回车换行符
在这里插入图片描述

练习

在这里插入图片描述
能不能把标题提取出来,比如热点新闻
在这里插入图片描述在这里插入图片描述
18位是2代,15位是老的
在这里插入图片描述
判断密码是不是强密码
在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值