python 爬蟲 中的正則表示式
阿新 • • 發佈:2022-02-04
正則表示式雖然不是python語言,但在python爬蟲中卻有著普遍的應用,可以說沒有正則表示式的爬蟲是一個沒有靈魂的爬蟲,話不多說,直接上乾貨!
-
元字元
- \d 匹配所有數字
- \w 匹配所有數字、字母、下劃線
- \D 除了數字以外的內容
- \W 除了數字、字母、下劃線以外的內容
- \S 匹配所有非空白
- [a,b,c] 匹配a,b,c的內容
- [^a,b,c] 匹配除了a,b,c的內容
- \s 匹配空白
- \b 匹配單個單詞邊界
-
量詞
- 元字元+ 元字元出現1次或多次(等同於{1, })
- 元字元* 前面的元字元出現0次或多次,儘可能多的拿到資料(等同於{0, })
- 元字元? 前面的元字元出現0次或一次
-
匹配字元
- 數字 [0-9]
- 小寫字母 [a-z]
- 大寫字母 [A-Z]
- 特殊字元 [\特殊字元]
-
^
- 放在區間裡表示取反
- [^0-9] 表示匹配非數字
- [^a-z] 表示匹配非小寫字母
- 放在區間外面表示匹配字串開頭(^python 表示以python開頭的內容)
- 放在區間裡表示取反
- $ 匹配字串結尾(python$ 表示以python結尾的單詞)
- ?
- 可以出現也可以不出現(colou?r 可以同時匹配color、colour)
- 轉換為非貪婪模式(\d{8,9}? 預設會匹配8和9位的數字,加上?後,只匹配8位的數字)
- . 除了換行符以外的任意內容
- {數字} 指定匹配次數(\d{9}指匹配9位數的數字)
- {數字,數字} 指定匹配區間(\d{4, }指匹配4位以上的數字)
-
惰性匹配
- .* 匹配最遠的字元
- .*? 匹配最近的字元(惰性匹配)
- 字串:今天晚上一起吃雞呀(匹配:晚上.*?吃雞) 結果:晚上一起吃雞
-
分組
- 加括號就可分組(提取號碼:0731-8283333的區號和正真的電話號碼 結果:\d{4}-\d{7})
- eg:<div>holle</div> <div>(.*?)</div> 不加括號是提取不出來的
- | 或則條件 (.jpg|.gif|.jpeg|.png)表示匹配這幾種字尾的圖片格式
- 非捕獲分組 (?:表示式)
-
分組的回溯引用
- 提取標籤中的文字 <font>提示</font>ge1:破壞標籤,將</font>改為</br>結果:<(\w+)>(.*?)</\1> \1 就為了保證和第一個分組一致
- eg2:編寫程式碼匹配符合ab ba 結果:(\w)(\w)\2\1
- 環視/欲搜尋
eg:在 我喜歡你 我喜歡 我喜歡我 喜歡 喜歡你
正向先行斷言(?=表示式) 取出喜歡,喜歡的後面必須有”你“
反向先行斷言 喜歡(?!你) 即喜歡後面沒有”你“
正向後行斷言(?<=我)喜歡(?=你) 喜歡的前面右”我“,後面有”你“
反向後行斷言(?<!我)喜歡(?!你) 喜歡的前面沒有我,後面沒有你
本文均自己整理,時間也比較趕,可能有的地方會存在問題,可以評論留言,看到了就會改。