最近在MOOC上學習嵩天老師的《Python網(wǎng)絡(luò)爬蟲與信息提取》,非常好的一門課程。相比互聯(lián)網(wǎng)上其他爬蟲教程,這門課的優(yōu)勢在于系統(tǒng)性。該課程用較短的時間介紹了入門爬蟲的知識點,并輔以實例練習,幫助學習者快速搭建起一個爬蟲的知識框架。
此為正則表達式部分的課程筆記。
正則表達式(regular expression),簡稱 regex,或 RE,是用來簡潔表達一組字符串的表達式,是一種通用的字符串表達框架。正則表達式可用一行字符串來表達有限或無限個字符串的特征。在網(wǎng)絡(luò)爬蟲的過程中,可以在解析好的網(wǎng)頁文本中搜索滿足一定特征的字符串。
文中的部分圖片來自嵩天老師的課程課件截圖。
正則表達式的應用范圍很廣闊,不僅僅用在python中。因此學習正則表達式的重中之重在于學習正則表達式的常用操作符,學會自己按照需要編寫正則表達式語句。本文分為兩個部分。第一個部分介紹正則表達式的基礎(chǔ)語法并輔以一些經(jīng)典實例;第二部分介紹python中的RE庫,該庫可以編譯正則表達式語句,并實現(xiàn)文本查找匹配以及修改的功能。
一、 正則表達式的語法

image.png
正則表達式語句就是由這些操作符組合而成的。上述操作符右側(cè)的實例,說明了該操作符的簡單用法。在實際應用中,需要結(jié)合實際場景,通過各種操作符的組合來編寫出正則表達式。以下是一些應用正則表達式的經(jīng)典案例,理解這些案例,有助于你更好地理解正則表達式操作符的用法。

image.png
二、 RE庫的使用
RE庫是python中用來解析正則表達式的庫。
調(diào)用方式:import re
小知識:raw string,是不包含對轉(zhuǎn)義符再次轉(zhuǎn)義的字符串。使用方式為在普通字符串前加個r,即可忽略字符串中出現(xiàn)的轉(zhuǎn)義字符。例如:fpath = r"c:\program",在python中等價于fpath = "c:\\program"。用此方法使得字符串表達更簡潔。

image.png
re庫常見函數(shù)解析
re.search(pattern,string,flags=0)
re.match(pattern,string,flags=0)
re.findall(pattern,string,flags=0)
re.split(pattern,string,maxsplit=0,flags=0)
re.finditer(pattern,string,flags=0)
re.sub(pattern,repl, string,count=0,flags=0)
pattern: 正則表達式字符串
string: 待匹配字符串
flags: 正則表達式使用時的控制標記
maxsplit:最大分割次數(shù)限制,當達到最大分割次數(shù)后,后續(xù)的文本不再分割。
repl:匹配的字符串
count: 最大替換次數(shù),達到此次數(shù)后不再替換。

image.png
RE庫的兩種用法
- 用法一
rst=re.search(r'[1‐9]\d{5}', 'BIT 100081')
- 用法二
pat=re.compile(r'[1‐9]\d{5}') #將正則表達式字符串編譯成正則表達式對象,可重復使用
rst=pat.search('BIT 100081')

image.png
以上是正則表達式對象的方法,與正則表達式庫函數(shù)的用法類似。