re 模塊

正則表達式

  • 元字符python

    • \w \s \d \W \S \D \n \t
    • \b ^ $
    • |
    • ()
    • [][^]
  • 量詞正則表達式

    • * + ?
    • {n} {n,} {n,m}
  • 貪婪和惰性匹配

    • 默認貪婪 :儘量多的匹配 ---回溯算法
    • 惰性匹配:儘量少的匹配 ----量詞?
    • .*?x
  • re 模塊

  • findall:從文件中選取須要的內容算法

    • 返回一個列表,全部匹配 的項,沒有匹配到就返回一個空列表spa

    • 若是遇到分組,finall會優先顯示分組中的內容code

    • (?:正則表達式)取消分組優先對象

    • import re
      ret = re.findall("www.(baidu|oldboy).com","www.baidu.com")
      print(ret)  #['baidu'] 這是由於findall會優先顯示分組中的內容
      ret = re.findall("www.(?:baidu|oldboy).com","www.baidu.com")
      print(ret)  #['www.baidu.com']  能夠同過?:取消分組的優先級

      (?P<組名>正則表達式) 表示個這個組起一個名索引

      (?P=組名)表示引用以前組的名字,引用部分匹配的內容必須和以前那個組名的內容相同內存

    pattern = "<(?P<tag>.*?)>.*?</(?P=tag)>"
    #pattern = r'<(.*?)>.*?</\1>'與上面用法同樣
    ret = re.search(pattern,"<alex>afjsh</alex>")
    print(ret)  #<_sre.SRE_Match object; span=(0, 18), match='<alex>afjsh</alex>'>
    ret = re.search(pattern,"<alex>afjsh</egon>")
    print(ret)  #None
  • search: 驗證用戶輸入內容「正則規則$」字符串

    • 返回一個對象,經過.grop()取值
    • 沒有匹配到會返回None,沒有.grou()方法
      • 因此一般先判斷,再取值
      • if ret:
        • ret.gout()
    • 若是遇到分組,經過索引能夠去各分組的內容
    • grouo(0) #==group()永遠是完整的匹配內容
  • match 驗證用戶輸入內容it

    • 與search功能類型至關於

    • `search("^\d","134afdksj") #==》match("\d","134afdksj") 做用是同樣的

    • import re
      ret = re.match("\d+","213asflk32")
      if ret:
          print(ret.group())  #213
      #等同與
      ret = re.search("^\d+","213asflk32")
      if ret:
          print(ret.group())  #213
  • 切割split

    • 經常使用來

    • s1 = "alex8123egon1120boss_jin"
      ret = re.split("\d+",s1)
      print(ret)      #['alex', 'egon', 'boss_jin']
      #若是須要保留以什麼進行分割的,須要用的分組
      ret = re.split("(\d+)",s1)
      print(ret)      #['alex', '8123', 'egon', '1120', 'boss_jin']
    • ret = re.split("[ab]","afsdabcd")
      print(ret)  #['', 'fsd', '', 'cd']這裏對字符串分割了倆次,先用a分割後再用b來進行分割
  • 替換sub 和subn

    • #替換sub
        s = "alex|egon|boss_jin"
        print(s.replace("|","-"))   #alex-egon-boss_jin
        s1 = "alex8123egon1120boss_jin"
        ret = re.sub("\d+","-",s1)  #內部接受四個參數,能夠選擇替換次數,默認所有替換
        print(ret)  #alex-egon-boss_jin
        ret1 = re.subn("\d+","-",s1)
        print(ret1) #('alex-egon-boss_jin', 2) #subn會返回一個元組,顯示替換後的字符串和替換次數
  • compile 編譯正則規則,

    • 運用場景:編譯正則規則,對多個字符串進行相同數據查找,節省時間,內存

    • obj = re.compile("\d{3}")  #將正則表達式編譯成一個正則表達式對象,
      ret = obj.search("afskj234afjk")
      print(ret.group())  #234
      ret1 = obj.search("afs2155fahfj")
      print(ret1.group()) #215
  • finditer #節省空間的方法,能夠和compile配合使用

    • ret = re.finditer("\d+","fsa213fajks24fjs243")
      print(ret)#<callable_iterator object at 0x000002703FFA9390>  一個迭代器
      for i in ret:
          print(i.group())    #213   24   243
相關文章
相關標籤/搜索