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   讓匹配時忽略大小寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM