趣說Python爬蟲03--正則表達式

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

上回說到Python大星閉關修煉《requests寶典》基礎心法七七四九個小時

攤牌了,不裝了...

Python大星正式晉級“二級爬者”

趣說Python爬蟲03--正則表達式

為了進一步增強自己的功力,

Python大星掏出了秘密武器--《正則心法》。

學會這門獨門武器,在“爬者”境界下將如探囊取物。

趣說Python爬蟲03--正則表達式

“宮廷玉液酒,一百八一杯,這酒怎麼樣,看我給你吹”。

先看下正則測試小工具,一般人我不告訴他

http://tool.oschina.net/regex/

小試牛刀:

趣說Python爬蟲03--正則表達式

是不是很神奇...

來來來,Python大星傳授你一套《正則心法》

趣說Python爬蟲03--正則表達式

圖1

趣說Python爬蟲03--正則表達式

圖2

考驗你悟性的時候

《正則心法》中我們可以看到:

“斜槓+小寫字母”“斜槓+大寫字母”語義相反

大寫字母的一般是否定語句

這些字母不需要死記硬背,背後都有其自然規律

實在記不住,點擊收藏

趣說Python爬蟲03--正則表達式

作為"爬蟲英語四級”的老玩家,小case

w---world

s---space

d---digital


接下來

我會依次展示《正則心法》奧秘之處

好的“心法”必須襯好的“武器”

re庫 瞭解哈

“正則心法”第一式--match

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

當我們用《正則心法》第一式獲取到匹配數據

你以為就over了嗎?

趣說Python爬蟲03--正則表達式

刁鑽需求的任務:提取匹配數據中的數字

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

^ :匹配一行字符串的開頭

\\s :匹配空格

\\d+: 匹配 1 個或多個數字

趣說Python爬蟲03--正則表達式

在正則表達式中使用英文括號()

group()group(0)

會提取完整的匹配結果

group(1) 會匹配第一個括號中的子字符串

假如正則表達式後面還有 () 包括的內容,那麼可以依次用 group(2)、group(3) 等來獲取

“正則心法”第二式--通用匹配

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

Python大星縱覽群書,發現個重大密碼

通配符無一例外的使用

.*

趣說Python爬蟲03--正則表達式

“正則心法”第三式--貪婪與非貪婪

● 什麼是貪婪匹配?

在貪婪匹配下,. 會匹配儘可能多的字符

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

括號中 \\d+

也就是至少一個數字,並沒有指定具體多少個數字,

因此,.* 就儘可能匹配多的字符,這裡就把 123456 匹配了,

給 \\d + 留下一個可滿足條件的數字 7,最後得到的內容就只有數字 7 了。

● 什麼又是非貪婪匹配?

非貪婪匹配就是儘可能匹配少的字符

非貪婪匹配的寫法是 .*?

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

貪婪匹配就是匹配儘可能多的字符

非貪婪匹配就是匹配儘可能少的字符

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

“正則心法”第四式--修飾符

當content中含有換行符或者大小寫

需要紅藍buff加持--“修飾符”

跟隨Python先打紅buff-- re.S(匹配包括換行在內的所有字符

趣說Python爬蟲03--正則表達式

1234567

再打藍buff -- re.I(使匹配對大小寫不敏感注意:I是i的大寫

趣說Python爬蟲03--正則表達式

1234567

“正則心法”第五式--轉義匹配

說到“轉義字符”,萬金油“斜槓”來表示

趣說Python爬蟲03--正則表達式

<re.match>

“正則心法”第六式--search

前面五式,我們使用的match方法是從字符串的開頭開始匹配的,

一旦開頭不匹配,那麼整個匹配就失敗

Python大星傳授你新的一招--search

在匹配時,search 方法會依次掃描字符串,直到找到第一個符合規則的字符串,然後返回匹配內容,如果搜索完了還沒有找到,就返回 None

趣說Python爬蟲03--正則表達式

“正則心法”第七式--findall

第六式 我們能輕鬆的用search方法獲取匹配正則表達式的第一個內容

但是...

當我想要匹配所有符合正則表達式的所有內容呢?

趣說Python爬蟲03--正則表達式

['1234567', '7654321']

“正則心法”第八式--sub

除了使用正則表達式提取信息外,有時候還需要藉助它來修改文本

趣說Python爬蟲03--正則表達式

Python

“正則心法”第九式--compile

最後,Python傳授畢生功力

準備好接收了嗎?

將正則字符串編譯成正則表達式對象,以便在後面的匹配中複用

趣說Python爬蟲03--正則表達式
趣說Python爬蟲03--正則表達式

呼氣,吸氣,收!!!

這套《正則心法》

get到了嗎?

趣說Python爬蟲03--正則表達式


分享到:


相關文章: