Python爬蟲正則表達式總結

1.正則表達式:RE(regular expression)。(W)

▪用來簡潔表達一組字符串的表達式
▪通用的字符串表達框架
▪針對字符串表達"簡潔"和"特徵"思想的工具
▪判斷某字符串的特徵歸屬

2.爲什麼使用正則表達式?(W)

●簡潔

3.如何使用正則表達式?(H)

編譯:將符合正則表達式語法的字符串轉換成正則表達式特徵。(使用re庫)
bs4模塊通過css selector定位html標籤爬取數據,而正則表達式通過字符串匹配html標籤爬取數據。

4.正則表達式的語法:

由字符和操作符構成

5.正則表達式的常用操作符:

.	表示任何單個字符
[ ]	字符集,對單個字符給出取值範圍	如:[abc]:a、b、c,[a-z]:a到z單個字符
[^ ]()	非字符集,對單個字符給出排除範圍	如:[^abc]:非a/b/c的單個字符

*	前一個字符0次或無限次擴展		如:abc*:ab/abc/abcc/abccc......
+	前一個字符1次或無限次拓展		如:abc+:abc/abcc/abccc.....
?	前一個字符0次或1次拓展		如:abc?:ab/abc

|     ()	左右表達式任意一個			如:abc|def:abc/def
{m}	擴展前一個字符m次			如:ab{2}c:abbc
{m,n}	擴展前一個字符m-n次,   (m,n]		如:ab{1,2}c:abc/abbc

^	匹配字符串開頭			如:^abc表示abc且且且在一個字符串的開頭
$	匹配字符串結尾			如:abc$表示abc且且且在一個字符串的結尾

()	分組標記,內部只能使用|操作符		如:(abc):abc,(abc|def):abc/def
\d	數字,等價於[0-9]
\w	單詞字符,等價於[A-Za-z0-9_]		任一字母、數字或下劃線(單詞字符)
\s	空白字符,例如空格、製表符、換行符等,等價於[\f\n\r\t\v]
(\D=\^d)		

6.正則表達式實例:

^[A-Za-z]+$				由26個字母組成的字符串
^[A-Za-z0-9]+$				由26個字母和數字組成的字符串
^-?\d+$					整數形式的字符串
^[0-9]*[1-9][0-9]*$				正整數形式的字符串
[1-9]\d{5}					中國境內郵政編碼,6[\u4e00-\u9fa5]				匹配中文字符
\d{3}-\d{8}|d{4}-\d{7}			國內電話號碼
[a-zA-Z]+://[^\s]*[.com|.cn]			匹配.com/.cn後綴的url地址

7.正則表達式的表示類型:

re庫採用raw String 類型表示正則表達式,表示爲:r’text’
●raw String(原生字符串類型):不包含轉義符的字符串。
建議:當正則表達式中包含 轉義符 時,使用raw String類型。(不繁瑣)

8.re庫主要功能函數:

re.search(pattern,string,flags=0):在字符串中搜索與正則表達式一樣的地方,返回第一個匹配上的內容,爲match對象。
re.match(pattern,string,flags=0):只在開始位置匹配,是則返回match對象,否則返回none。(從頭)
re.findall(pattern,string,flags=0):搜索字符串,返回所有匹配上的內容,類型爲字符串列表或元組列表
re.split(pattern,string,maxsplit=0,flags=0):將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
re.sub(pattern,repl,string,count=0,flags=0):查找匹配並替換
re.compile(pattern,flags=0):將正則表達式的字符串形式編譯成正則表達式對象(面向對象)
pattern:raw String/String,	string:待匹配字符串,    flags:正則表達式使用時的控制標記
maxsplit:最大分割數,剩餘部分作爲最後一個元素輸出。(maxsplit=1,則只分割一個)
repl:替換匹配字符串的字符串。count:匹配的最大替換次數

flags:
re.I   re.IGNORECASE	忽略正則表達式的大小寫,[A-Z]能夠匹配小寫字符
re.M re.MULTILINE		正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始
re.S  re.DOTALL		正則表達式中的.操作符能夠匹配所有字符

9.match對象:

match對象的屬性:
	(1).string:待匹配的文本
	(2).re:匹配時使用的pattern對象(正則表達式)
	(3).pos:正則表達式搜索文本的開始位置
	(4).endpos:正則表達式搜索文本的結束位置
match對象的方法:
	(1.group(n):group(0)輸出全部子匹配,group(n)輸出第n個括號的匹配結果
	(2.start():匹配字符串在原始字符串的開始位置
	(3.end():匹配字符串在原始字符串的結束位置
	(4.sparn():返回(.start(),.end())

10.貪婪匹配和最小匹配:

Re庫默認採用貪婪匹配,即輸出匹配最長的字符串。
最小匹配操作符:(在貪婪匹配的基礎上)
?、+?、??、{m,n}?
.
?代表匹配任意字符。此處的?是非貪婪模式匹配(懶惰模式),一旦找到能匹配的字符就完成一次匹配,即最短距離匹配。
如果不加?則爲貪婪模式匹配,.*進行最長距離匹配

11.子匹配與分組:

子匹配:()。
分組:一個正則表達式中可存在多個()/子匹配,把括號內的子匹配作爲匹配返回結果。
若只需要獲得子匹配的結果,可以使用re.findall方法,search和match都要返回完整匹配。
當只有一個括號(分組)時,findall返回類型爲字符串列表,當存在兩個及以上括號(分組)時,findall返回類型爲元組的列表。

發佈了33 篇原創文章 · 獲贊 1 · 訪問量 4700
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章