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)

 

############################################################