python 基础---正则

陌路散爱 提交于 2020-02-05 13:48:33

在线测试工具 http://tool.chinaz.com/regex/

import rere.findall : def findall(pattern, string, flags=0)re.search  : def search(pattern, string, flags=0)re.match   : def match(pattern, string, flags=0)
flags有很多可选值:
re.I(IGNORECASE)忽略大小写,括号内是完整的写法
re.M(MULTILINE)多行模式,改变^和$的行为
re.S(DOTALL)点可以匹配任意字符,包括换行符
re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
re.U(UNICODE)使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
  1 # ?在正则三用法:
  2 #1.做量词表示零次或者一次
  3 #2.放量词后面表示惰性匹配标志
  4 #3.在findall里面代表取消分组优先
  5 
  6 # while True:
  7 #     phone_number = input('please input your phone number : ')
  8 #     if len(phone_number) == 11 \
  9 #             and phone_number.isdigit()\
 10 #             and (phone_number.startswith('13') \
 11 #             or phone_number.startswith('14') \
 12 #             or phone_number.startswith('15') \
 13 #             or phone_number.startswith('18')):
 14 #         print('是合法的手机号码')
 15 #     else:
 16 #         print('不是合法的手机号码')
 17 #
 18 # import re
 19 # phone_number = input('please input your phone number : ')
 20 # if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
 21 #         print('是合法的手机号码')
 22 # else:
 23 #         print('不是合法的手机号码')
 24 
 25 import re
 26 # findall
 27 # search
 28 # match
 29 
 30 # findall
 31 # ret = re.findall('[a-z]+','eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里
 32 # print( ret )
 33 
 34 # search
 35 # ret = re.search('a','eva egon yuan')
 36 # # 从前往后,找到一个就返回,返回的变量需要调用group才能拿到结果
 37 # # 如果没有找到,那么返回None,调用group会报错
 38 # # print(ret)
 39 # # print(ret.group())
 40 # if ret:
 41 #     print(ret.group())
 42 
 43 # match
 44 # ret = re.match('ev','eva egon yuan')
 45 # if ret:
 46 #     print(ret.group())
 47 # # match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。
 48 # # 匹配的内容需要用group才能显示
 49 # # 如果没匹配上,就返回None,调用group会报错
 50 
 51 # split
 52 # ret = re.split('[ab]','abcd')
 53 # # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
 54 # print(ret)
 55 
 56 # sub
 57 # ret = re.sub('\d','H','eva3egon4yuan4',1)
 58 # #将数字替换成'H',参数1表示只替换1个
 59 # print(ret)
 60 
 61 # subn
 62 # ret = re.subn('\d','H','eva3egon4yuan4')
 63 # ##将数字替换成'H',返回元组(替换的结果,替换了多少次)
 64 # print(ret)
 65 
 66 # compile
 67 # 正则规则经常要用,就可以使用compile进行编译,然后用这对象进行re模块内方法的调用
 68 # obj = re.compile('\d{3}')
 69 # #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
 70 # ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
 71 # print(ret.group())
 72 # ret = obj.search('abcashgjgsdghkash456eeee3wr2') #正则表达式对象调用search,参数为待匹配的字符串
 73 # print(ret.group())
 74 
 75 # finditer
 76 # ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
 77 # print(ret)  # <callable_iterator object at 0x10195f940>
 78 # # print(next(ret).group())  #查看第一个结果
 79 # # print(next(ret).group())  #查看第二个结果
 80 # # print([i.group() for i in ret])  #查看剩余的左右结果
 81 # for i in ret:
 82 #     print(i.group())
 83 
 84 # search 取分组
 85 # ret = re.search('^[1-9]\d{14}(\d{2}[0-9x])?$','110105199912122277')
 86 # print(ret.group())
 87 # print(ret.group(1))
 88 
 89 # findall 没有分组机制
 90 # ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
 91 # print(ret)  # ['oldboy']
 92 # # 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
 93 # # 改为
 94 # ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
 95 # print(ret)  # ['www.oldboy.com']
 96 
 97 # split 分组
 98 ret =re.split('\d+','eva3egon4yuan')
 99 print(ret)    #结果 : ['eva', 'egon', 'yuan']
100 
101 ret = re.split('(\d+)','eva3egon4yuan')
102 print(ret)    #结果 : ['eva', '3', 'egon', '4', 'yuan']
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!