Python re模块

re模块

常用方法

  • 用于使用正则表达式匹配对应的字符串
  • 最常用的有三分别是find_all search match
  • findall(正则表达式,待匹配的字符串)
#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())
posted @ 2019-09-14 13:24  Hyyyy  阅读(546)  评论(0编辑  收藏  举报