Python正則表達式使用
正則表達式不是python內置的功能,所以需要引入import re模塊纔可以使用。正則表達式的功能很多,但是我們通常使用的功能也就是那幾個,這裏對工作中經常使用到的正則表達式進行一個系統的總結。
1. 字符:
. 匹配除了換行符“\n”外的字符
\ 轉義字符,使後一個字符改變以前的意思。如\* 只表示一個字符*
[] 字符集,範圍字符。括號中的字符可以枚舉,也可以定義範圍,如[abc],[a-c]
2. 預定義字符集(可以出現在字符集[…]中)
\d 數字,[0-9]
\D 非數字,[^0-9]
\s 空白字符,[空格\t\r\n\f\v]
\S 非空白字符,[^\s]
\w 單詞字符,字母數字下劃線[a-zA-Z0-9_]
\W 非單詞字符,[^\W]
3. 數量詞(用在字符或(…)之後)
? 匹配0個或1個字符
+ 匹配1個或多個字符
* 匹配0個或多個字符
{m} 匹配前一個字符出現m次
{m,n} 匹配前一個字符出現m至n次;省略m,匹配0至n次;省略n,匹配m至無限次
?? +? ? {m,n}? 使?,+,*,{m,n}變成非貪婪模式
4. 邊界匹配(不消耗待匹配字符串中的字符)
^ 匹配字符串開頭,多行模式中匹配每一行的開頭
$ 匹配字符串的結尾,多行模式中匹配每一行的結尾
\A 緊匹配字符串開頭
\Z 僅匹配字符串結尾
\b 匹配\w和\W之間 a\b!bc 匹配 a!bc
\B [^\b] a\Bbc 匹配 abc
5. 邏輯分組
| 代表表達式任意匹配一個,先嚐試左邊匹配,左邊匹配成功則跳過右邊表達式。如果|沒有被包含在()中,則它的範圍是整個正則表達式
(…) 括號中的表達式將分組,從表達式左邊,每遇到一個分組的左括號“(”編號+1。分組表達式作爲一個整體,後面可接數量詞。表達式中的|僅在改組中有效
(?P<name>…)分組除了原有的編號外,爲分組指定一個別名,如 (?P<id>abc){2}匹配abcabc
\<number> 引用編號爲number的分組到字符串中
(?P=name) 引用別名爲name的分組匹配到的字符串,如 (?P<id>\d)abc(?P=id)匹配 1abc1,5abc5
6. 正則練習:
m.group 輸出匹配的所有子字符串合集,等價於m.group(0);m.groups()輸出匹配的所有子字符串,下表從1開始;
1) 匹配字符串全部是小寫
importre
輸出: m.group():: abcdef m.groups():: () |
2) 從http請求中返回的content-type內容提取出charset的值
Import re str ='text/html; charset=utf-8' 輸出: m.group():: text/html; charset=utf-8 m.groups():: ('utf-8',) |
3) 匹配名字、姓名和電話
Import re str ='Doe, John: 555-1212' 輸出: m.group():: Doe, John: 555-1212 m.groups(first):: John John m.groups(last):: Doe Doe m.groups(phone):: 555-1212 555-1212 |
4) 提取出IP和路徑
importre 輸出: m.group():: 192.168.22.77:/home/adf m.groups():: ('192.168.22.77', '/home/adf') m.group(ip):: 192.168.22.77 m.group(path):: /home/adf |