元字符和其含義 . 匹配除換行符之外的任意字符 \ 轉義字符,使後一個字符改變原來的意思 \w 匹配字母、數字、下劃線:[A-Za-z0-9_] \W 匹配特殊字符:[^A-Za-z0-9_] \s 匹配任意的空白符:[<空格>\t\r\n\f\v] \S 匹配非空白符 \d 匹配數字 \D 匹配非數字 \n 匹配一個換行符 \t 匹配一個製表符 \b 匹配一個單詞的結尾 * 匹配前一個字符零次或更屢次 + 匹配前一個字符一次或更屢次 ? 匹配前一個字符零次或一次 ^ 匹配字符串的開始 $ 匹配字符串的結尾 | 匹配|左右表達式中的任意一個 () 匹配括號內的表達式,也表示一個組 [...] 匹配字符組中的字符 [^...] 匹配除了字符組中字符的全部字符 {n} 匹配前一個字符n次 {n,} 匹配前一個字符n次或更屢次 {n,m} 匹配前一個字符n到m次 # 幾個經常使用的非貪婪匹配Pattern *? 重複任意次,但儘量少重複 +? 重複1次或更屢次,但儘量少重複 ?? 重複0次或1次,但儘量少重複 {n,m}? 重複n到m次,但儘量少重複 {n,}? 重複n次以上,但儘量少重複 .*?x 就是取前面任意長度的字符,直到一個x出現 re.compile(pattern,flags=0) pattern: 編譯時用的表達式字符串。 flags 編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。 e.S(DOTALL) 使.匹配包括換行在內的全部字符 re.I(IGNORECASE) 使匹配對大小寫不敏感 re.L(LOCALE) 作本地化識別(locale-aware)匹配,法語等 re.M(MULTILINE) 多行匹配,影響^和$ re.X(VERBOSE) 該標誌經過給予更靈活的格式以便將正則表達式寫得更易於理解 re.U 根據Unicode字符集解析字符,這個標誌影響\w,\W,\b,\B re.match(pattern, string, flags).group() 嘗試從字符串的開始匹配一個模式若是字符串開始不符合正則表達式,則匹配失敗,函數返回None; # 第一個參數是正則表達式,若是匹配成功,則返回一個Match,不然返回一個None; # 第二個參數表示要匹配的字符串; # 第三個參數是標緻位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。 a=re.search(pattern, string, flags).group() 匹配整個字符串,只到找到第一個匹配而後返回,若是字符串沒有匹配,則返回None。 re.sub(pattern, repl, string, count=0, flags=0) 用於替換字符串中的匹配項。 # 第四個參數指替換個數。默認爲0,表示每一個匹配項都替換。 re.split(pattern, string, maxsplit=0, flags=0) 將字符串按空格分割成一個單詞列表。 # re.split(',','123,456') # ['123', '456'] split的優先級查詢 # 沒有()的沒有保留所匹配的項,可是有()的卻可以保留了匹配的項 # r = re.split('(,)','123,456') # ['123', ',', '456'] re.findall(pattern, string, flags=0) 匹配字符串全部的內容,把匹配到的字符串以列表的形式返回 findall的優先級查詢: ?: 在有分組的狀況下findall()函數,只拿分組裏的字符串,拿全部匹配到的字符串, 若是想要匹配結果,取消權限便可:(?:[0-9]) re.finditer(pattern, string, flags=0) 返回一個存放匹配結果的迭代器 命名分組匹配: 分組的意義,就是在匹配成功的字符串中,再提取()裏面的字符串 ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>") # 還能夠在分組中利用?<name>的形式給分組起名字 # 若是不給組起名字,也能夠用\序號來找到對應的組,表示要找的內容和前面的組內容一致 # 獲取的匹配結果能夠直接用group('名字')或group(序號)拿到對應的值