Python中模塊之re的功能介紹


                                              re模塊的功能介紹

1. 方法

  1. match

    從開頭開始查找

    方法:re.match(pattern,string,flags=0)
    返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到)
    例如:m = re.match('e','excel')
         print(m.group())
     >>> 'e'
    #該方法只能從開頭開始查,如果查找的內容不是開頭或者不存在時,返回值為None,驗證時調用group方法時將報錯,如果找到了,也只有一個,驗證時可以使用group方法進行獲取查找的內容。
    
  2. search

    全文搜索,只獲取第一個

    方法:re.search(pattern,string,flags=0)
    返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到)
    例如:s = re.search('ba','adbadfsbadsf')
         print(s.group())
     >>> 'ba'
    #該方法與上述方法類似,不過該方法查找的范圍是全部內容,但返回只返回查找到的第一個,驗證方法同上。
    
  3. findall

    返回找到的所有內容(全文搜索)

    方法:re.findall(pattern,string,flags=0)
    返回值:list
    例如:print(re.findall('s','afadsfdsf'))
     >>> ['s','s']
    #該方法不需要通過group方法進行驗證,找不到時返回一個空列表。
    
  4. split

    搜索全文並進行切片

    方法:re.split(pattern,string,maxsplit=0,flags=0)
    返回值:list
    例如:print(re.split('ax','sdaxfsfsaxdfsax'))
     >>> ['sd', 'fsfs', 'dfs', '']
    #指定內容作為分割字符串的點進行切片,如果指定內容開頭或者結果則結果為列表中的一個空字符串,同時也可以指定切片的最大次數。
    
  5. sub

    替換

    方法:re.sub(pattern,repl,string,count=0,flags=0)
    返回值:str
    例如:print(re.sub('a','23','sdfafasdf'))
     >>> 'sdf23f23sdf'
    #該方法默認全文替換,可以指定替換次數,如果查找的內容不存在時,將返回原字符串。
    
  6. fullmatch

    完全匹配搜索

    方法:re.fullmatch(pattern,string,flags=0)
    返回值:<class '_sre.SRE_Match'>(找到) or None(沒找到)
    例如:fm = re.fullmatch('sa','sa')
         print(fm.group())
     >>> 'sa'
    #該方法與match類似,只不過,該方法搜索的匹配內容必須和搜索的原文一樣,否則都認為是未找到。
    
  7. subn

    替換並返回元祖

    方法:re.subn(pattern,repl,string,count=0,flags=0)
    返回值:tuple
    例如:print(re.subn('as','3','sfsasa,sdf'))    
     >>> ('sfs3a,sdf', 1)
    #該方法把替換后的字符串作為元祖的第一個元素,第二個元素為替換的次數,如果未替換,則次數為0
    
  8. finditer

    查找所有並把返回值生成一個迭代器

    方法:re.finditer(pattern,string,flags=0)
    返回值:<class 'callable_iterator'>
    例如:f_iter = re.finditer('a','adsfasfa')
         find_l = [i.group() for i in f_iter]
         print(find_l)
     >>> ['a', 'a', 'a']
    #利用列表推導式把獲取到的結果作為列表進行返回。
    

2. 表達式符號

  1. 常用符號如下:

        符號                      表示
    1. '.'              默認匹配除\n之外的任意一個字符,包括字母、數字、中文、特殊字符等,若flags指定為S(DOTALL),則匹配任意字符,包括換行符。
    2. '^'              默認匹配字符開頭,若flags指定為M(MULTILINE),可以匹配多行中的開頭(如:'^a','\nabd\nsaf')。
    3. '$'              默認匹配字符結尾,若flags指定為M(MULTILINE),可以匹配多行中的結尾(如:'$ab','asdfab\ndsa\n')。
    4. '*'              匹配字符0次或多次
    5. '+'              匹配字符1次或多次
    6. '?'              匹配字符0次或1次
    7. '{m}'            匹配字符m次
    8. '{n,m}'          匹配字符n次到m次
    9. '|'              匹配字符二選一
    10. '(...)'         分組匹配
    11. '\A'            匹配字符開頭,與'^'一樣
    12. '\Z'            匹配字符結尾,與'$'一樣
    13. '\d'            匹配數字[0,9]
    14. '\D'            匹配非數字
    15. '\w'            匹配字母、數字、中文,除特殊字符
    16. '\W'            匹配特殊字符,包括\n
    17. '\s'            匹配空白字符(即' ')、\t、\n、\r
    18. '(?P<name>)'    分組匹配加命名
    

    第18個表達式符號'(?P)'的實例如下:

    s = re.search("(?P<province>\d{2})(?P<city>\d{2})(?P<county>\d{2})(?P<year>\d{4})","371481199306143242")
    print(s.groupdict())
        {'year': '1993', 'city': '14', 'province': '37', 'county': '81'}
    print(s.group())
        3714811993
    print(s.groups()) 
        ('37', '14', '81', '1993')
    #該表達式得到的返回值也是<class '_sre.SRE_Match'>這個類。通過驗證的方法也比較多,驗證獲得的返回值分別為字典、字符串和元祖類型。 
    
  2. flags常用的幾種關鍵字參數

    1. re.I(re.IGNORECASE):忽略大小寫
    2. re.M(re.MULTILINE):多行模式,對'^'和'$'有所改變
    3. S(DOTALL):包含\n的匹配模式,主要用於'.'的匹配規則
    #括號內為完整輸入,前面是簡寫。
    

    flags關鍵字參數的實例如下:

    1. re.I

      str1 = '\nad23好*sd\n阿道夫dsaf\nsSD'
      f_i = re.findall('s',str1,flags=re.I)
      print(f_i)
          ['s', 's', 's', 'S']
      #如果flags為默認值(即flags=0),則該返回值中不會有'S'該元素。
      
    2. re.M

      str1 = '\nad23好*sd\n阿道夫dsaf\nsSD'
      f_start = re.findall('^s',str1,flags=re.M)
      print(f_start)
          ['s']
      f_stop = re.findall('f',str1,flags=re.M)
      print(f_stop)
          ['f']
      #如果flags為默認值(即flags=0),則該返回值應為空列表。
      
    3. re.S

      str1 = '\nad23好*sd\n阿道夫dsaf\nsSD'
      s_any = re.search('.',str1,flags=re.S)
      print(s_any.group())
      #該打印的結果是空,由於驗證時未報錯,說明是有匹配到'\n'換行符,如果flags為默認值(即flags=0),則上述驗證將報錯。


免責聲明!

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



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