#findall# 功能:匹配字符串中所有符合条件的 # 返回值:列表,会将所有匹配到的项加入到列表中返回import re
phone_num ='17344332233'# 待匹配的字符串
regex = r'^1[3-9]\d{9}$'# 匹配手机号使用的正则
ret = re.findall(regex,num)print(ret)# findall和分组的关系
ret = re.findall('\d(\d)','a1,b22,c345')print(ret)# [2,4]
ret = re.findall('\d(?:\d)','a1,b22,c345')print(ret)# ['22', '34']
search(正则表达式,待匹配的字符串)
# 功能:匹配从左到右所有符合的,只返回一个值# 返回值: 返回的是一个re自定义类型
num ='17344332233'
regex = r'^1[3-9]\d{9}$'
ret = re.search(regex,num)print(ret)if ret:print('是合法的手机号码 %s'% num)else:print('不是合法的手机号码')#serach取分组中的内容:根据序号取,根据组名取
ret = re.search('(?P<num1>\d)(?P<num2>\d)','a1,b28,c345')print(ret.group(0))print(ret.group(1))print(ret.group(2))print(ret.group('num1'))print(ret.group('num2'))# 分组的引用 ?P=num1表示引用了num1分组,匹配到的内容必须和num1分组中的内容一模一样
ret = re.search('(?P<num1>\d)(?P=num1)','a14,b22,c3357')print(ret.group())
match(正则表达式,带匹配的字符串) - 匹配用户输入的内容是否合法时候都是用match
# 功能:从头开始匹配,如果开始部分匹配到后则匹配成功,否则匹配失败# 返回值: re自定义类型
num ='17344332233'
regex = r'1[3-9]\d{9}$'
ret = re.match(regex, num)if ret:print(ret)print('是合法的手机号码 %s'% num)else:print('不是合法的手机号码')# 相当于search方法在正则前加上^
了解内容
# split 根据正则表达式切割
ret = re.split(r'\d+',r'alex123mhy345aa33')print(ret)# sub 根据正则表达式,将匹配到的字符串替换成对应的(正则表达式,要替换的内容,待匹配的字符串,要替换的个数)
ret = re.sub(r'\d+','4',r'alex123mhy345aa33',1)print(ret)# 结果: alex4mhy4aa4# 替换方法2:返回的是一个元组,第一个元素是替换结果,第二个是替换次数
ret = re.subn(r'\d+','4',r'alex123mhy345aa33')print(ret)# 结果: ('alex4mhy4aa4', 3)
进阶
# compile 预编译 预先来编译一下我们写好的正则
rule = re.compile(r'\d+')
ret = rule.findall('alex123eva456')print(ret)
ret = rule.findall('手机号码13737373377\n身份证号 110107197712072277')print(ret)# 结果:['123', '456'] ['13737373377', '110107197712072277']# finditer将匹配到的内容,返回成一个迭代器,循环取出来的是一个re自定义类型,通过group方法取值,可以节省内存空间
ret = re.finditer('\d','alex1916936916598sb7985073495898632847')print(ret)for i in ret:print(i.group())