正則表達式
簡單來說,正則表達式就是描述字符串的一套規則。比如,我們想找出一個網頁中的所有URL鏈接,其他的信息需要過濾掉。那麼此時,我們可以觀察鏈接的格式,然後寫一個正則表達式來表示所有的電子郵件。隨後,我們可以利用該表達式從網頁中提取出所有滿足該規則的URL鏈接。正則表達式的功能非常強大,在爬蟲的實際項目中,對於處理特定格式的信息,經常需要用到正則表達式。
在Python中,可以使用re模塊來實現Python正則表達式。
一、正則表達式基礎知識
正則表達式學習其實非常簡單,就是有較多的需要記的字符、字符功能。爲了能夠有一個系統的i思維去把握正則,我將會從原子、元字符、模式修正符與懶惰模式等方面介紹。
-
原子
原子——正則表達式中最基本的單位(普通字符、非打印字符、通用字符、原子表)普通字符
數字、大小寫字母、下劃線等都可作爲原子使用。非打印字符
符號 含義 \n 用於匹配一個換行符 \t 用於匹配一個製表符 通用字符
符號 含義 \w 匹配任意一個字母、數字或下劃線 \W 匹配除字母、數字或下劃線以外的任意一個字符 \d 匹配任意一個十進制數 \D 匹配除十進制數以外的任意一個字符 \s 匹配任意一個空白字符 \S 匹配除空白字符以外的任意一個字符 原子表
可以定義一組地位平等的原子,然後匹配的時候會取該原子表中的任意一個原子進行匹配。在Python中,原子表由[]來表示,如[xyz]就是一個原子表,定義了三個原子,三個原子地位平等。(另注:^xyz表示除原子表以外的任意字符)
-
元字符
以上是常見原子的使用,一般需要結合元字符才能發揮正則表達式的強大功能。
元字符,在正則表達式中即具有特殊含義的字符。(另注:| 模式選擇符)符號 含義 . 匹配除換行符以外的任意字符 ^ 匹配字符串的開始位置 $ 匹配字符串的結束位置 * 匹配0次、1次或多次前面的原子 + 匹配1次或多次前面的原子 {n} 前面的原子恰好出現n次 {n,} 前面的原子至少出現n次 {n,m} 前面的原子至少出現n次,至多出現m次 () 模式單元符 -
模式修正符
所謂模式修正符,即在不改變正則表達式的情況下,通過模式修正符改變正則表達式的含義,從而實現一些匹配結果的調整功能。
符號 | 含義 |
---|---|
I | 匹配時忽略大小寫(Ignore的首字母) |
M | 多行匹配(Multiple的首字母) |
L | 做本地化識別匹配 |
U | 根據Unicode字符及解析字符 |
S | 讓.匹配包括換行符,可以匹配任意字符 |
-
貪婪模式與懶惰模式
貪婪模式核心:儘可能的多匹配,懶惰模式核心:匹配成功一次就不再匹配。
貪婪模式在第一次匹配成功後,不會停止,一直到整個待匹配內容的最後。
懶惰模式在第一次匹配成功後就會停止,就近原則。
二、正則表達式常用函數
常見的正則表達式函數有 re,match()、re,search()、全局匹配函數、re,sub()。
re.match()——源字符串的開頭進行匹配,要求第一個字符就匹配成功
re.search()——全文進行檢索匹配,與match()最大不同是,在全文在進行檢索並匹配
全局匹配函數(re.findall)
需先對正則表達式進行預編譯,pattern=re.compile(".python."),返回的是list集合
re.sub()函數
re.sub(pattern,rep,string,max)——rep:要替換成的字符串,max:可選項,最多替換次數
三、正則表達式實例
對於正則表達式的學習,實戰是最好的方法。當然也需要不斷地積累,做到熟能生巧。
- 匹配.com或.cn後綴的URL網址
實例目的:將一串字符裏面的以.com或.cn爲域名的URL網址匹配出來。
- 匹配電話號碼
實例目的:將一串字符裏出現的電話號碼信息提取出來。
- 匹配電子郵件
實例目的:將一串字符裏面出現的電子郵件信息提取出來。
四、結束語
最後,祝大家都能學有所成!!!