正則表達式

一、方法


1. re.match函數

  • 從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none
  • 匹配成功re.match方法返回一個匹配的對象,否則返回None。
        re.match(pattern, string, flags=0)
    
    參數說明:
    parameter description
    pattern 匹配的正則表達式
    strings 要匹配的字符串
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

2. re.search方法

  • 掃描整個字符串並返回第一個成功的匹配結果。
  • 匹配成功re.search方法返回一個匹配的對象,否則返回None。
        re.search(pattern, string, flags=0)
    
    參數說明:
    parameter description
    pattern 匹配的正則表達式
    strings 要匹配的字符串
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
  • re.match與re.search的區別
    • re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。
          import re
      
          line = "Cats are smarter than dogs";
           
          matchObj = re.match( r'dogs', line, re.M|re.I)
          if matchObj:
             print ("match --> matchObj.group() : ", matchObj.group())
          else:
             print ("No match!!")
           
          matchObj = re.search( r'dogs', line, re.M|re.I)
          if matchObj:
             print ("search --> matchObj.group() : ", matchObj.group())
          else:
             print ("No match!!")
      
      運行結果:
          No match!!
          search --> matchObj.group() :  dogs
      

3. re.sub函數

  • 用於替換字符串的匹配項
        re.sub(pattern, repl, string, count=0, flags=0)
    
    參數說明:(前三個爲必選參數)
    parameter description
    pattern 匹配的正則表達式
    repl 替換的字符串,也可以是一個函數
    strings 要匹配的字符串
    count 模式匹配後替換的最大次數,默認0表示替換所有
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
    • repl參數是一個函數
      import re
      
      # 匹配數字乘2
      def double(matched):
          value = int(matched.group('value'))
          return str(value * 2)
      
      s = 'A234543354FBJS24'
      print(re.sub('(?P<value>\d+)', double, s))
      
      執行輸出結構爲:
          A469086708FBJS48
      

4. re.complie函數

  • 用於編寫正則表達式,生成一個正則表達式(pattern)對象,供match和search函數使用
        re.complie(pattern[,flag])
    
    參數說明:
    parameter description
    pattern 匹配的正則表達式
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

5. re.findall函數

  • 在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
    • 注:match和search匹配一次,findall匹配所有
        re.findall(srting[, pos[, endpos]])
    
    參數說明:
    parameter description
    string 待匹配的字符串
    pos 可選參數,指定字符串的起始位置,默認爲0
    endpos 可選參數,指定字符串的結束位置,默認爲字符串的長度

6. re.finditer函數

  • 在字符串中找到正則表達式所有匹配的所有子串,並把它們作爲一個迭代器返回
        re.finditer(pattern, string, flags=0)
    
    參數說明:
    parameter description
    pattern 匹配的正則表達式
    strings 要匹配的字符串
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
        import re
        
        it = re.finditer(r'\d+', '32n53nk64kj24n')
        for match in it:
            print(match.group())
    
    輸出結果:
        32
        53
        64
        24
    

7. re.split函數

  • 按照能夠匹配的子串將字符串分割返回列表
        re.split(pattern, string[, maxsplit=0, flags=0])
    
    參數說明:
    parameter description
    pattern 匹配的正則表達式
    strings 要匹配的字符串
    maxsplit 分隔次數,maxsplit=1 分隔一次,默認爲0,不限次數
    flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

8. 正則表達式修飾符

    parameter | description
    ---|---
    re.I | 忽略大小寫
    re.L | 表示特殊字符集\w,\W,\b,\B,\s,\S依賴於當前環境
    re.S | 即爲'.'並且包括換行符在內的任意字符('.'不包括換行符)
    re.U | 表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S依賴於 Unicode 字符屬性數據庫
    re.X | 爲了增加可讀性,忽略空格和'#'後面的註釋

二、匹配規則


pattern description
^ 匹配字符串的開頭
$ 匹配字符串的末尾
. 匹配任意字符串,除換行符,當指定。re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符
[…] 用來表示一組字符,單獨列出:[amk]匹配 ‘a’, ‘m’或’k’
[^…] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
re* 匹配0個或多個的表達式
re+ 匹配1個或多個的表達式
re? 匹配0個或1個由前面的正則表達式的片段,非貪婪模式
re{n} 匹配n個前面表達式。例如,'o{2}‘不能匹配 ‘Bob’中的’o’,但是能匹配’food’中的兩個’o’
re{n,} 精確匹配n個前面表達式。例如:'o{2,}'不能匹配 ‘Bob’中的’o’,但是能匹配’fooooood’中的所有o。"o{1,}“等價於"o+”。"o{0,}“則等價於"o*”
re{n,m} 匹配n到m次由前面的正則表達式的片段,貪婪方式
a | b 匹配a或b
(re) 匹配括號內的表達式,也表示一個組
(?imx) 正則表達式包含三種可選標誌:i, m, 或 x 。隻影響括號中的區域。
(?-imx) 正則表達式關閉 i, m, 或 x 可選標誌。隻影響括號中的區域。
(?:re) 類似(…)但是不表示一個組
(?imx: re) 在括號中使用i,m或x可選標誌
(?-imx: re) 在括號中不使用i,m,或x可選標誌
(?#…) 註釋
(?=re) 前向肯定界定符。如果所含正則表達式,以 … 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩餘部分還要嘗試界定符的右邊。
(?!re) 前向否定界符。於肯定定符相反;當所含表達式不能在字符串當前位置匹配時成功
\w 匹配數字字母下劃線
\W 匹配非數字字母下劃線
\s 匹配任意空白字符,等價於[\n\t\r\f]
\S 匹配任意非空字符
\d 匹配任意數字,等價於[0-9]
\D 匹配非數字
\A 匹配字符串開始
\Z 匹配字符串結束,如果存在換行,只匹配到換行前的結束字符串
\z 匹配字符串結束
\G 匹配最後匹配完的位置
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如: ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’
\B 匹配非單詞邊界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’
\n,\t 匹配一個換行符。匹配一個製表符等
\1…\9 匹配一個換行符。匹配一個製表符等
\10 匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式
發佈了12 篇原創文章 · 獲贊 4 · 訪問量 4207
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章