python正则表达式|CSDN创作打卡

1、正则表达式的含义及作用

可以理解为一种高效的字符串匹配方式,可以对字符串中需要的部分进行检索,替换等。python中也有很多字符串的方法,但是相比正则表达式而言,还是慢了很多,代码也没有正则表达式方便。

2、在线验证工具

http://www.liminba.com/tool/regex/
在这里插入图片描述
这个支持高亮显示,牛逼一点,建议用这个来做匹配

https://c.runoob.com/front-end/854/
在这里插入图片描述

2、常见语法

就是元字符,使用元字符来进行正则表达式的获取,常见的元字符如下所示

直接匹配,就是匹配里面有的相同字,类似python里面的find函数,下面直接匹配正,可以看到正被匹配出来
在这里插入图片描述
使用python编写如下

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

lines = str.splitlines()
for line in lines:
    print(line[line.find('正'):line.find('正')+1])

输出结果OK!
在这里插入图片描述

直接使用正则表达式检索

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

p = re.compile(r'正')
for one in p.findall(str):
    print(one)

在这里插入图片描述
正则表达式的元字符如下:

. * + ? \ [ ] ^ $ { } | ( )

. 匹配所有字符

下面正后面加上.对正后面任意字符进行匹配

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

p = re.compile(r'正.')
for one in p.findall(str):
    print(one)

结果如下
在这里插入图片描述

*重复匹配任意次数,包括0次

注意*跟着前面的一个走,前面的一个是他要匹配的对象

假如我们还是用上面的方法来匹配

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

p = re.compile(r'正*')
for one in p.findall(str):
    print(one)

在这里插入图片描述
匹配的还是正,因为正只有一个,重复匹配任意次还是一个,修改为匹配则

import re

str = '''正则表达式-修饰符(标记)
正则则则则则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

p = re.compile(r'正则*')
for one in p.findall(str):
    print(one)

可以看到后面有多少个则就匹配多少个
在这里插入图片描述
*还经常和.混合使用,用来表示任意字符任意次数,比如我想匹配正则表达式后面的内容,那不就是正则表达式后面的所有内容,就是任意字符任意次数吗

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
'''

p = re.compile(r'式.*')
for one in p.findall(str):
    print(one)

这里还是要加上一个引导的,怎么去掉后面再说
在这里插入图片描述

+重复匹配多次,不包括0次

和上面的*没什么区别,就是至少匹配一次

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
正则表达式
'''

p = re.compile(r'式.+')
for one in p.findall(str):
    print(one)

可以最后一行连式都没有匹配,因为式后面0个字符,所以就没有匹配
在这里插入图片描述

?匹配0-1次

就是有就匹配一个,没有就不匹配,这样就实现了匹配0-1次的效果

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
正则表达式
'''

p = re.compile(r'式.?')
for one in p.findall(str):
    print(one)

可以看到最后一个式也被匹配了,尽管他后面一个字符也没有,这就是匹配0次
在这里插入图片描述

{}匹配指定次数

这个还是一样的,跟在字符后面,对指定字符进行次数匹配

import re

str = '''正则表达式-修饰符(标记)
正则表达式匹配规则
正则表达式运算符优先级
正则表达式元字符
正则表达式语法
正则表达式大全
正则表达式式
'''
p = re.compile(r'表达式{2,3}')
for one in p.findall(str):
    print(one)

上面的代码中对式进行匹配,要求式次数2-3次,只有一个符合要求,固只有一个被选中
在这里插入图片描述

[]匹配几个字符之一

  • [abc] 匹配abc中的任意一个字符,就是见到里面的就匹配
  • [a-c] 匹配a-c中的,就是如果要匹配的太多。懒得写的就用这种方式,比如数字0-9,字母a-z这样的
  • [.]匹配.,这里.不代表任意字符,而是指.的本身字符含义
  • 如果在[]中使用^表示取反的意思

这个用上面的测试网站来看更直观,匹配数字
在这里插入图片描述
匹配字母
在这里插入图片描述
匹配.字符
在这里插入图片描述
取反操作,注意这里不是对单个字符取反,而是这个符号后面的所有的取反
在这里插入图片描述
在这里插入图片描述
如果^前面有内容,这个将被作为普通字符使用,效果如下,所以如果是想作为取反符号使用的话,前面不要加上字符
在这里插入图片描述

^匹配开头$匹配结尾

比如我们想匹配每行字符串的开头数字
在这里插入图片描述
这里\d+的写法源于简便写法,相当于[0-9],参见https://www.runoob.com/python/python-reg-expressions.html#flags
在这里插入图片描述
但是上面的只匹配了一行,这是不合理的,继续查看匹配网站,可以看到这里有个多行选项,默认是不勾选的,选上即可
在这里插入图片描述
效果如下
在这里插入图片描述
自然这个在python代码中华也是默认没有选择的,如果需要多行匹配的话,在原来的代码后面加入多行模式
在这里插入图片描述
代码如下

p = re.compile(r'^\d+',re.M)
for one in p.findall(str):
    print(one)

下面我们试试结尾,获取这个成绩,注意这个既然是结尾,就自然要写在结尾处,卸载匹配选择项的后面
在这里插入图片描述

|或,匹配其中之一

比如我们只想匹配字符中的几个文本,但是这些文本不一定是连在一起的,这样如果写在一起的话又无法匹配,比如我们想匹配正,表,式这三个字符,但是他们不是连在一起的,就很难匹配,需要一个个的匹配
在这里插入图片描述
这个时候需要在中间加入竖线继续或选择
在这里插入图片描述

当然这个也是一个个表示的,不会连成一个整体,如下所示
在这里插入图片描述

()组选择

组就是把 正则表达式匹配的内容里面其中的某些部分标记为某个组
下面我们对一段内容的逗号前面的内容进行匹配
在这里插入图片描述
当然这样也可以,但是这样都把前面的,包含了,但是逗号又不能不要,因为没有,就无法分割了啊,他是重要的标志
在这里插入图片描述
这个时候就需要用到组选择了,效果如下
在这里插入图片描述
这一看还是这样啊,没有吧逗号去掉啊,可能是因为这个不够牛逼,这个时候其实已经匹配好了,不过是在组里,逗号也被匹配了,但是不在组里,需要在代码里面选择组的模式,添加下面的模式:
在这里插入图片描述
代码如下

p = re.compile(r'^(.*),',re.MULTILINE)
for one in p.findall(str):
    print(one)

效果如下
在这里插入图片描述

贪婪匹配与非贪婪匹配

比如我们想匹配<>里面的内容,使用下面的方法,可以看到匹配的内容如下:注意中间有一个title是不需要匹配的,但是他也给匹配上了,因为他从认识到第一个<之后就开始匹配,直到认识最后一个>为止,所以她其实只匹配了一个,就是只匹配了最大的那个<>,但这不是我们想要的。
在这里插入图片描述
因此在这个后面加上?就可以避免,他只匹配认识的第一个>,但是这个时候字符串还没有匹配完,所以他进行下一次的匹配,直到匹配完最后一个,效果如下:
在这里插入图片描述

对元字符的处理

就是出现了我们匹配字符的字符怎么处理,比如我们匹配这个.,他默认是作为任意字符来处理的,就全都匹配上了
在这里插入图片描述
这个时候加上\就行,顺利匹配
在这里插入图片描述

4、切割字符串

python中的字符串切割是spilt函数,这个在文章开头已经介绍过了,不过正则里面也有这个函数,而且主要可以用正则的语法,可以匹配很多
在这里插入图片描述
代码如下

import re

str = '分为,  仿佛完:服务器儿;冯文峰。'

p = re.split(r'[;,:。]',str)
print(p)

效果如下
在这里插入图片描述

5、替换字符串

使用sub函数进行字符串的替换,第一个参数为字符串正则匹配位置,第二个参数填入要匹配的字符串

import re

str = '分为,  仿佛完:服务器儿;冯文峰。'

p = re.sub(r'服务器','lx2035',str)
print(p)

效果如下
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃成蹊2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值