1. 程式人生 > 其它 >python 爬蟲 中的正則表示式

python 爬蟲 中的正則表示式

正則表示式雖然不是python語言,但在python爬蟲中卻有著普遍的應用,可以說沒有正則表示式的爬蟲是一個沒有靈魂的爬蟲,話不多說,直接上乾貨!

  • 元字元

    1. \d 匹配所有數字
    2. \w 匹配所有數字、字母、下劃線
    3. \D 除了數字以外的內容
    4. \W 除了數字、字母、下劃線以外的內容
    5. \S 匹配所有非空白
    6. [a,b,c] 匹配a,b,c的內容
    7. [^a,b,c] 匹配除了a,b,c的內容
    8. \s 匹配空白
    9. \b 匹配單個單詞邊界
  • 量詞

    1. 元字元+ 元字元出現1次或多次(等同於{1, })
    2. 元字元* 前面的元字元出現0次或多次,儘可能多的拿到資料(等同於{0, })
    3. 元字元? 前面的元字元出現0次或一次
  • 匹配字元

    1. 數字 [0-9]
    2. 小寫字母 [a-z]
    3. 大寫字母 [A-Z]
    4. 特殊字元 [\特殊字元]
  • ^

    1. 放在區間裡表示取反
      1. [^0-9] 表示匹配非數字
      2. [^a-z] 表示匹配非小寫字母
    2. 放在區間外面表示匹配字串開頭(^python 表示以python開頭的內容)
  1. $ 匹配字串結尾(python$ 表示以python結尾的單詞)
    1. 可以出現也可以不出現(colou?r 可以同時匹配color、colour)
    2. 轉換為非貪婪模式(\d{8,9}? 預設會匹配8和9位的數字,加上?後,只匹配8位的數字)
  2. . 除了換行符以外的任意內容
  3. {數字} 指定匹配次數(\d{9}指匹配9位數的數字)
  4. {數字,數字} 指定匹配區間(\d{4, }指匹配4位以上的數字)
  • 惰性匹配

    1. .* 匹配最遠的字元
    2. .*? 匹配最近的字元(惰性匹配)
    3. 字串:今天晚上一起吃雞呀(匹配:晚上.*?吃雞)  結果:晚上一起吃雞
  • 分組

  1. 加括號就可分組(提取號碼:0731-8283333的區號和正真的電話號碼  結果:\d{4}-\d{7})
  2. eg:<div>holle</div> <div>(.*?)</div> 不加括號是提取不出來的
  3. | 或則條件 (.jpg|.gif|.jpeg|.png)表示匹配這幾種字尾的圖片格式
  4. 非捕獲分組 (?:表示式)
  • 分組的回溯引用

  1. 提取標籤中的文字 <font>提示</font>ge1:破壞標籤,將</font>改為</br>結果:<(\w+)>(.*?)</\1> \1 就為了保證和第一個分組一致
  2. eg2:編寫程式碼匹配符合ab ba 結果:(\w)(\w)\2\1
  3. 環視/欲搜尋

eg:在 我喜歡你 我喜歡 我喜歡我 喜歡 喜歡你

正向先行斷言(?=表示式) 取出喜歡,喜歡的後面必須有”你“

反向先行斷言 喜歡(?!你) 即喜歡後面沒有”你“

正向後行斷言(?<=我)喜歡(?=你) 喜歡的前面右”我“,後面有”你“

反向後行斷言(?<!我)喜歡(?!你) 喜歡的前面沒有我,後面沒有你

本文均自己整理,時間也比較趕,可能有的地方會存在問題,可以評論留言,看到了就會改。