re.compile 函數
compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
語法:
re.compile(pattern[, flags])
參數:
-
pattern : 一個字符串形式的正則表達式
-
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:
- re.I 忽略大小寫
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
- re.M 多行模式
- re.S 即為 . 並且包括換行符在內的任意字符(. 不包括換行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
- re.X 為了增加可讀性,忽略空格和 # 后面的注釋

1 # coding=utf-8 2 import re 3 import logging 4 5 s = 'A1B2C55' 6 # 用於匹配最少一位數字 7 pattern = re.compile(r'\d+') 8 # match 從頭開始匹配 9 w = pattern.match(s) 10 logging.warning(w) 11 12 # 從 B 開始匹配 13 w = pattern.match(s, 2, 10) 14 logging.warning(w) 15 16 # 從 2 開始匹配 17 w = pattern.match(s, 3, 10) 18 logging.warning(w) 19 20 logging.warning(w.group()) 21 logging.warning(w.start()) 22 logging.warning(w.end()) 23 logging.warning(w.span())
輸出結果:
WARNING:root:None WARNING:root:None WARNING:root:<_sre.SRE_Match object at 0x7fd93b5dab90> WARNING:root:2 WARNING:root:3 WARNING:root:4 WARNING:root:(3, 4)
在上面,當匹配成功時返回一個 Match 對象,其中:
group([group1, …])
方法用於獲得一個或多個分組匹配的字符串,當要獲得整個匹配的子串時,可直接使用group()
或group(0)
;start([group])
方法用於獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數默認值為 0;end([group])
方法用於獲取分組匹配的子串在整個字符串中的結束位置(子串最后一個字符的索引+1),參數默認值為 0;span([group])
方法返回(start(group), end(group))
。

1 # coding=utf-8 2 import re 3 import logging 4 5 s = 'Hello Python Hello World' 6 pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) 7 # match 從頭開始匹配 8 w = pattern.match(s) 9 # 打印結果 10 logging.warning(w) 11 # 返回成功的字符串 12 logging.warning(w.group()) 13 # 返回第一個分組匹配到的子串 14 logging.warning(w.group(1)) 15 # 返回第二個分組匹配到的子串 16 logging.warning(w.group(2)) 17 # 返回第一個分組匹配到的子串索引 18 logging.warning(w.span(1)) 19 # 返回第二個分組匹配到的子串索引 20 logging.warning(w.span(2)) 21 # 等價於 (w.group(1), w.group(2), ...) 22 logging.warning(w.groups()) 23 # 不存在第三個 會報錯 24 logging.warning(w.group(3))
輸出結果:
WARNING:root:<_sre.SRE_Match object at 0x7f62f0583cf0> WARNING:root:Hello Python WARNING:root:Hello WARNING:root:Python WARNING:root:(0, 5) WARNING:root:(6, 12) WARNING:root:('Hello', 'Python') Traceback (most recent call last): File "test_word.py", line 17, in <module> logging.warning(w.group(3)) IndexError: no such group