文章目錄
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返回類型爲元組的列表。