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元')