re.findall #返回所有满足条件的结果放在列表里,分组优先,没有group
re.search #从前往后找到一个就返回,且返回一个对象,需要调用group才能拿到结果
#如果没找到,返回None,调用group会报错
#if ret:
print(ret.group())
re.match #从头开始匹配,如果能匹配上就返回一个变量,其余同上
re.split #re.split('[ab]','abcd') -> ['','','cd']
re.sub #re.sub('\d','H','adsafa1dasda2ada4',2) 以正则规则替换,返回替换结果
re.subn #返回元组(替换的结果和次数)
re.compile #将正则表达式编译为一个正则表达式对象
#obj = re.compile(\d{3})
#ret = obj.search('abc123defg')
re.finditer #返回一个储存着结果的迭代器,需要用.group()显示结果
ret.group(1) #返回第一个分组的值
'\d(?P<name>\w+)' #group命名规则 group(name)来调用
?p = name #复用名字 引用分组
###########################################################
import re
ret = re.findall('www.(baidu | oldboy).com', 'www.oldboy.com')
print(ret) #['oldboy'] findall会优先把匹配结果组里的内容返回
ret = re.findall('www.(?baidu | oldboy).com', 'www.oldboy.com')
print(ret) #['www.oldboy.com'] 组里加?取消分组优先
############################################################
ret = re.split('\d+','iam1zha2zha3hui')
print(ret) #['iam','zha','zha','hui']
ret = re.split('(\d+)','iam1zha2zha3hui')
print(ret) #['iam','1','zha','2','zha','3','hui']
#split加()会保留匹配部分
############################################################
flags可选值
re.I #忽略大小写
re.M #多行模式,用于^和$
re.S #.可以匹配任意字符,包括换行符,最常用
re.L #本地化识别匹配,表示特殊字符集,依赖当前环境,不推荐使用
re.U #python3默认的flag
re.X #冗长模式,pattern字符串可以是多行的,忽略空白字符,并可以添加注释
############################################################
ret = re.search(r'<(\w+)>\w+</\1>','<h1>hello</h1>') #如果不给组起名字,可以用\序号来找到对应的组
print(ret.group(1)) #h1
print(ret.group()) #<h1>hello</h1>
############################################################
ret = re.findall(r'\d+\.\d+ | (\d+)','1-2*(60+(-40.35/5)-(-4*3))') #先取较长的小数
ret.remove('') #去掉列表里的空值
print(ret)
############################################################