1. 程式人生 > >正則表示式中的模式,函式,及使用規則

正則表示式中的模式,函式,及使用規則

一、正則表示式轉義

    正則中的特殊符號:

               .   *   ?    $  []   {}   ()   |   \      

    正則表示式匹配特殊字元如果需要加 \  表達轉義,比如:

                pattern         string

 python         "\\$\\d+"       "$10"       

  raw字串:原始字串對內容不解釋轉義,就表達內容原本意義

二、貪婪與非貪婪
貪婪模式:正則表示式的重複匹配總是儘可能多的向後匹配更多內容

          *    +   ?   {m,n} 
          
       非貪婪(懶惰模式):儘可能少的匹配內容                       

       貪婪  -------》非貪婪    *?     +?     ??   {m,n}?            

      e.g.      In [58]: re.findall(r"ab+?","abbbbbbb")
                Out[58]: ['ab']

                In [59]: re.findall(r'ab{3,4}?','abbbbbbbbb')
                Out[59]: ['abbb']

                In [60]: re.findall(r'ab??','abbbbbbb')
                Out[60]: ['a']

三、正則表示式的子組

      可以使用()為正則表示式建立子組,子組可以看作是正則表示式內部操作的一個整體

       *子組是在正則表示式整體匹配到內容的前提下才會發揮作用,他不影響正則表示式整體去匹配目標內容這一原則

          e.g.   In [66]: re.search(r"(ab)+\d+","ababab1213").group()
                  Out[66]: 'ababab1213'


         子組所用:

                  1、作為內部整體可以改變某些元字元的行為

                    e.g.  In [68]: re.search(r"\
[email protected]
\w+\.(com|cn)","[email protected]").group() Out[68]: '[email protected]' 2、子組在某些操作中可以單獨匹配內容 e.g. In [72]: re.search(r"(https|http|ftp)://\S+","https://www.baidu.com").group() Out[72]: 'https://www.baidu.com' 自組使用注意事項: *一個正則表示式中可以有多個子組 *子組一般由外到內,由左到右稱之為第一,第二,第三...子組 *子組不能重疊,巢狀也不宜過多

四、捕獲組和非捕獲組

   格式:(?P<name>pattern)
     
     e.g.   In [74]: re.search(r"(?P<dog>ab)cdef","abcdefghti").group('dog')
            Out[74]: 'ab'

    作用:可以通過組名更方便獲取某組內容

五、正則表示式設計原則

          1、正確性,能正確匹配到目標內容

          2、排他性,除了要匹配的內容,儘可能不會匹配其他內容

          3、全面性,需要對目標的各種情況考慮,做到不遺漏

六、re模組

      re. regex = compile(pattern,flags = 0)
            功能:生成正則表示式物件
            引數:pattern   正則表示式
                     flags  功能標誌位,豐富正則表示式的匹配功能
            返回值:返回正則表示式物件

       re.findall(pattern,string,flags)
             功能:從目標字串查詢正則匹配內容
             引數:pattern   正則表示式
                   string   目標字串
                   flags   標誌位
             返回值:返回匹配到的內容
                          如果正則有子組則只返回子組對應的內容

         regex.findall(string,pos,endpos)
              功能:從目標字串查詢正則匹配內容
              引數:pattern   正則表示式
                    string   目標字串
                    pos      匹配目標的起始位置
                   endpos    匹配目標的終止位置
              返回值:返回匹配到的內容
                          如果正則有子組則只返回子組對應的內容

      
          re.split(pattern,string,flags = 0)
               功能:根據匹配內容切割字串
               引數:pattern    string   flags(同上)
               返回值:返回列表,列表中為切割的內容    

           re.sub(pattern,replaceStr,string,max,flags)
                功能:替換正則匹配到的目標子串部分
                引數:pattern
                          replaceStr   要替換的內容
                          string(同上)
                          max    最多替換幾處  預設全部替換
                         flags(同上)
                返回值:返回替換後的字串               

          re.subn(pattern,replaceStr,string,max,flags)
                功能:替換正則匹配到的目標子串部分
                 引數:pattern
                         replaceStr   要替換的內容
                         string(同上)
                         max    最多替換幾處  預設全部替換
                         flags(同上)
                 返回值:返回一個元組,為實際替換了幾處和替換後的字串

          re.finditer(pattern,string,flags)
                功能:使用正則表示式匹配目標字串
                引數:pattern   string   flags(同上)
                返回值:返回一個迭代物件,迭代到的內容是一個match物件        

          fullmatch()
                功能:完全匹配目標字串
                引數:pattern,string,flags
                返回值:返回匹配到的match物件,如果沒有匹配成功返回None 

           match(pattern,string,flags)
                功能:從開頭位置匹配目標字串
                引數:pattern,string,flags
                返回值:返回匹配到的match物件,如果沒有匹配成功返回None

         search(pattern,string,flags)
                功能:從開頭位置匹配目標字串
                引數:pattern,string,flags
                返回值:返回匹配到的match物件,如果沒有匹配成功返回None
 

  compile物件屬性:
             flags:標誌位
             pattern:正則表示式
             groups:有多少子組
             groupindex:捕獲組形成組名和序列號的字典,組名為鍵,序列號為值