Python的re模块常用方法小练

在这里插入图片描述

flag匹配模式

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

findall函数

findall(pattern, string, flags=0) 作为re模块的三⼤搜索函数之⼀,findall()和match()、search()的不同之处在 于,前两者都是单值匹配,找到⼀个就忽略后⾯,直接返回不再查找了。⽽ findall是全⽂查找,它的返回值是⼀个匹配到的字符串的列表。这个列表没有 group()⽅法,没有start、end、span,更不是⼀个匹配对象,仅仅是个列表! 如果⼀项都没有匹配到那么返回⼀个空列表

str='对方对方的<url>https://www.baidu.com</url> 1212 <url>https://www.sina.com</url>'
out = re.findall(r'<url>(.*?)</url>', str)
print(out) 
#['https://www.baidu.com'] #['https://www.baidu.com', 'https://www.sina.com']

print(re.findall(r'<div>.*?</div>','<div>2121212</div><div>12343gee</div>'))
#['<div>2121212</div>', '<div>12343gee</div>']

split函数

split(pattern, string, maxsplit=0, flags=0) re模块的split()⽅法和字符串的split()⽅法很相似,都是利⽤特定的字符去分割 字符串。但是re模块的split()可以使⽤正则表达式,因此更灵活,更强⼤
split有个参数maxsplit,⽤于指定分割的次数

a = re.split('123','==123!! abc123. 123. 123abc. 1231')
print(a)
#['==', '!! abc', '. ', '. ', 'abc. ', '']

sub函数

sub(pattern, repl, string, count=0, flags=0) sub()⽅法类似字符串的replace()⽅法,⽤指定的内容替换匹配到的字符,可以 指定替换次数

#需求: 剔除连续重复---将包含连续重复的字符组成的字符串,进行提重处理
str = '#####   gggooo ffforrr iiittt!!!!! jjjussst dooo iiit!"追追追求梦梦梦梦想,,做做做就对对对了!'
str = re.sub(r"(.)\1+",r'\1',str)
print(str) ## go for it! just do it!"追求梦想,做就对了!
# \1表示使用编号为1的分组


# 将口吃的话反应为正常
str = '######  开开开开玩玩玩笑,这这这么贵的酒酒酒谁谁喝的起!!!'
str = re.sub(r"(.)\1+",r'\1',str)
print(str)
# # 开玩笑,这么贵的酒谁喝的起!


#替换字符串中的字符
str = '你愁啥,瞅你咋地,再瞅一44,44就44'
str = re.sub(r'4',r'试',str)
print(str)
#你愁啥,瞅你咋地,再瞅一试试,试试就试试

#替换html的空格
str = 'T-shirt\xa0\xa0短袖圆领衫,体恤衫\xa0'
str = re.sub(r'\xa0',r' ',str) # T-shirt  短袖圆领衫,体恤衫
print(str)
#T-shirt  短袖圆领衫,体恤衫

#替换字符串中的子字符串
str = '做人要谦虚abcdef多听听他人的意见abcdef然后认真记下来对你有意见的都是谁。'
str = re.sub(r'abcdef',r', ',str)
print(str)
#做人要谦虚, 多听听他人的意见, 然后认真记下来对你有意见的都是谁。

#替换字符串中特定的字符
#实例:替换字符串中的空格,\t,\r, \n
str = '人才 和天才  只差一个"二"\r\r\r\t。故,人才很\n精,而天\t才总是有点二。'
str = re.sub(r'[\r\n\t ]',r'',str)
#str = re.sub(r'\s',r'',str)
print(str)
#人才和天才只差一个"二"。故,人才很精,而天才总是有点二。

分组功能

Python的re模块有⼀个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于⼆次过滤。实现分组靠圆括号(),⽽获取分组的内容靠的 是group()、groups()。re模块⾥的积个重要⽅法在分组上,有不同的表现形式,需要区别对待。

str = '剪头发 81元,洗头发 12元,染头发 123元'
r = re.search('.+(\d+元).+(\d+元).+(\d+元)',str)
print(r.groups())
#('1元', '2元', '3元')

r1 = re.search('\D*(\d+元)\D*(\d+元)\D*(\d+元)',str)
print(r1.group())  #剪头发 81元,洗头发 12元,染头发 123元
print(r1.group(0)) #剪头发 81元,洗头发 12元,染头发 123元
print(r1.group(1)) #81元
print(r1.group(2)) #12元
print(r1.group(3)) #123元
print(r1.groups()) #'81元', '12元', '123元')


r2 = re.search('\D+(\d+元)\D+(\d+元)\D+(\d+元)',str)
print(r2.groups()) #('81元', '12元', '123元')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Narutolxy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值