flags常用常量
re.I 全写re.IGNORECASE,忽略大小写
import re
string = '123Aa123'
re.search('aa', string) # None
re.search('aa', string, re.I) # Aa
re.A 全写re.ASCII,让\w、\b、\s、\d等特殊字符只匹配ASCII码,而不是匹配Unicode
import re
string = '我爱你520Love'
re.search('\w+', string) # '我爱你520Love'
re.search('\w+', string, re.A) # '520Love' 因为中文不在ASCII表
re.S 全写re.DOTALL让.匹配所有字符,包括\n换行符
import re
string = '123.\n123'
re.search('3.*?3', string) # None
re.search('3.*?3', string, re.S) # '3.\n123'
re.M 全写re.MULTILINE,多行模式,用^可以匹配多行模式下的开头。默认只能匹配第一个开头
import re
string = '123\n123'
re.findall('^\d2', string) # ['12']
re.findall('^\d2', string, re.M) # ['12', '12'] 郑州治疗胎记哪家好 http://www.zzzykdmlk
四、结合例子
1、比如匹配整个HTML页面的图片.
PS::需要注意的是 如果findall()里面包含有() 他会为里面的()分组,如果我们不在最外边加括号的话,那么我们只能得到他里面() 给我们所分的组。那为什么match() search()又不需要呢,是他们默认最外层有(括号)
# 页面源码是html
import re
imglist = re.findall('(http(s)?://.*?(png|jpg))', html) # 返回列表[('最外层括号内容','顺序括号内容1', '顺序括号内容2'), ]
# 例如
html = 'url(http://img.baidu.com/img/baike/logo-baike.jpg)sfseurl(https://img.baidu.com/img/baike/logo-baike.png)'
imglist1 = re.findall('https{0,1}://.*?\.(png|jpg)', html) # 不加括号,他只得到图片后缀 既 imglist1 = ['jpg', 'png']
imglist2 = re.findall('(https{0,1}://.*?\.(png|jpg))', html)