Python正则表达式(4)---字符串匹配分组

  • Python正则表达式(4)---字符串匹配分组
    •  
      字符 功能
      | 匹配左右任意一个表达式(或)
      (ab) 将括号中字符作为一个分组(与)
      \num 引用分组num匹配到的字符串
      (?P<name>) 分组起别名
      (?P=name) 引用别名为name分组匹配到的字符串
       
       
       
       
       
       
       
       
       
       
       
    •  
       
       
      • 示例1:
      • 需求:匹配出0-100之间的数字
        • import re
          ret = re.match("[1-9]?\d","8")
          print(ret.group()) #8
          
          ret = re.match("[1-9]?\d","78")
          print(ret.group()) #78
          
          #不正确的情况
          ret = re.match("[1-9]?\d","08")
          print(ret.group())  #0
          
          #修正之后
          ret = re.match("[1-9]?\d$","08")
          if ret:
              print(ret.group())
          else:
              print("不在0-100之间")
          
          #添加|
          ret = re.match("[1-9]?\d$|100","8")
          print(ret.group())  #8
          
          ret = re.match("[1-9]?\d$|100","78")
          print(ret.group())  #78
          
          ret = re.match("[1-9]?\d$|100","08")
          #print(ret.group())  #不在0到100之间,故错
          
          ret = re.match("[1-9]?\d$|100","100")
          print(ret.group()) #100
          
          #运行结果
          8
          78
          0
          不在0-100之间
          8
          78
          100

           

      • 示例2:()  
      • 需求:匹配出163、126、qq邮箱
        • import re
          ret = re.match("\w{4,20}@16..com","test@163.com")
          print(ret.group())  #test@163.com
          
          ret = re.match("\w{4,20}@(163|126|qq)\.com","test@126.com")
          print(ret.group())  #test@126.com
          
          ret = re.match("\w{4,20}@(163|126|qq)\.com","test@qq.com")
          print(ret.group())  #test@qq.com
          
          ret = re.match("\w{4,20}@(163|126|qq)\.com","test@sina.com")
          if ret:
              print(ret.group())
          else:
              print("不是163、126、qq邮箱")   #不是163、126、qq邮箱
          
          
          
          #运行结果
          test@163.com
          test@126.com
          test@qq.com
          不是163、126、qq邮箱



      • 示例3:\
      • 需求:匹配出<html>hh</html>
        • import re
          
          #能够完成对正确的字符串的匹配
          ret = re.match("[<a-zA-Z>]*\w</[a-zA-Z]*>","<html>hh</html>")
          print(ret.group())    #<html>hh</html>
          
          #如果遇到非正常的html格式字符串,匹配出错
          ret = re.match("[<a-zA-Z>]*\w</[a-zA-Z]*>","<html>hh</htmlbalabal>")
          print(ret.group())  #<html>hh</htmlbalabal>
          
          #正确的理解思路 :如果在第一对<>中是什么,按理来说后面的那对<>中就应该是什么
          
          #通过引用分组中匹配到的数据即可,但是要注意是元字符串,即类似r""这种格式
          ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
          print(ret.group())  #<html>hh</html>
          
          
          #因为2对<>中的数据不一致,所以匹配不出来
          test_label = "<html>hh</htmlbalabala>"
          ret= re.match(r"<([a-zA-Z]*)>\w*</\1>",test_label)
          if ret:
              print(ret.group())
          else:
              print("%s 这是一个不对的标签" % test_label)    #<html>hh</htmlbalabala> 这是一个不对的标签
          
          
          #运行结果
          <html>hh</html>
          <html>hh</htmlbalabal>
          <html>hh</html>
          <html>hh</htmlbalabala> 这是一个不对的标签
      •  模式修正符
        •  re.S  让.也可以匹配多行
        •  re.I   让匹配时忽略大小写
posted @ 2020-04-02 22:56  手可摘星辰/*  阅读(1074)  评论(0编辑  收藏  举报