Python網(wǎng)絡(luò)爬蟲之正則表達(dá)式(一)

當(dāng)我們已經(jīng)獲取到一個完整的頁面HTML內(nèi)容時,如何從這些雜亂的內(nèi)容中鎖定并提取出我們所需要的內(nèi)容那?這就要用到一個十分強(qiáng)大的工具:正則表達(dá)式。


1?初識正則表達(dá)式


正則表達(dá)式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達(dá)對字符串的一種過濾邏輯。


正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強(qiáng)大。得益于這一點,在提供了正則表達(dá)式的語言里,正則表達(dá)式的語法都是一樣的,區(qū)別只在于不同的編程語言實現(xiàn)支持的語法數(shù)量不同;但不用擔(dān)心,不被支持的語法通常是不常用的部分。如果已經(jīng)在其他語言里使用過正則表達(dá)式,只需要簡單看一看就可以上手了。


正則表達(dá)式的大致匹配過程是:1.依次拿出表達(dá)式和文本中的字符比較,2.如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。3.如果表達(dá)式中有量詞或邊界,這個過程會稍微有一些不同。


2?正則表達(dá)式規(guī)則


下面是Python語言中正則表達(dá)式的元字符和匹配語法:


3?數(shù)量詞的貪婪模式與非貪婪模式


正則表達(dá)式通常用于在文本中查找匹配的字符串。Python里數(shù)量詞默認(rèn)是貪婪的(在少數(shù)語言里也可能是默認(rèn)非貪婪),總是嘗試匹配盡可能多的字符;非貪婪的則相反,總是嘗試匹配盡可能少的字符。例如:正則表達(dá)式”ab*”如果用于查找”abbbc”,將找到”abbb”。而如果使用非貪婪的數(shù)量詞”ab*?”,將找到”a”。


注:我們一般使用非貪婪模式來提取網(wǎng)頁內(nèi)容。


4?反斜杠問題


與大多數(shù)編程語言相同,正則表達(dá)式里使用”\”作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。假如你需要匹配文本中的字符”\”,那么使用編程語言表示的正則表達(dá)式里將需要4個反斜杠”\\\\”:前兩個和后兩個分別用于在編程語言里轉(zhuǎn)義成反斜杠,轉(zhuǎn)換成兩個反斜杠后再在正則表達(dá)式里轉(zhuǎn)義成一個反斜杠。


Python里的原生字符串很好地解決了這個問題,這個例子中的正則表達(dá)式可以使用r”\\”表示。同樣,匹配一個數(shù)字的”\\d”可以寫成r”\d”。有了原生字符串,表達(dá)式也更加直觀了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文譯自 制作正則引擎的作者 Jan Goyvaerts 為工具 RegexBuddy 寫的教程版權(quán)歸原作者所有注...
    極客圈閱讀 3,405評論 0 25
  • 在前面我們已經(jīng)搞定了怎樣獲取頁面的內(nèi)容,不過還差一步,這么多雜亂的代碼夾雜文字我們怎樣把它提取出來整理呢?下面就開...
    AromaMuzi閱讀 368評論 0 0
  • 正則表達(dá)式(regular expression)是一種可以在許多現(xiàn)代應(yīng)用程序和編程語言中使用的特殊形式的代碼模式...
    Android輪子哥閱讀 12,009評論 4 16
  • 正則表達(dá)式學(xué)習(xí)筆記 一篇記錄了學(xué)習(xí)正則表達(dá)式的筆記。 1. 轉(zhuǎn)義字符 在 HTMl 中轉(zhuǎn)義字符以 & 符號開頭,分...
    heyi_let閱讀 482評論 0 0
  • 七絕《荷仙》 因何龍女下凡塵? 彩霧輕云繞麗身。 必是貪食人世饌, 喜蝶愛鳥退金鱗。 2019.12.08輕風(fēng)
    云淡風(fēng)輕客閱讀 885評論 0 2

友情鏈接更多精彩內(nèi)容