上回說到Python大星閉關修煉《requests寶典》基礎心法七七四九個小時
攤牌了,不裝了...
Python大星正式晉級為“二級爬者”
為了進一步增強自己的功力,
Python大星掏出了秘密武器--《正則心法》。
學會這門獨門武器,在“爬者”境界下將如探囊取物。
“宮廷玉液酒,一百八一杯,這酒怎麼樣,看我給你吹”。
先看下正則測試小工具,一般人我不告訴他
http://tool.oschina.net/regex/
小試牛刀:
是不是很神奇...
來來來,Python大星傳授你一套《正則心法》
考驗你悟性的時候
從《正則心法》中我們可以看到:
“斜槓+小寫字母”和“斜槓+大寫字母”語義相反
含大寫字母的一般是否定語句
這些字母不需要死記硬背,背後都有其自然規律
實在記不住,點擊收藏
作為"爬蟲英語四級”的老玩家,小case
w---world
s---space
d---digital
接下來
我會依次展示《正則心法》的奧秘之處
好的“心法”必須襯好的“武器”
re庫 瞭解哈
“正則心法”第一式--match
當我們用《正則心法》第一式獲取到匹配數據,
你以為就over了嗎?
刁鑽需求的任務:提取匹配數據中的數字
^ :匹配一行字符串的開頭
\\s :匹配空格
\\d+: 匹配 1 個或多個數字
在正則表達式中使用英文括號()
group()和group(0) 會提取完整的匹配結果
group(1) 會匹配第一個括號中的子字符串
假如正則表達式後面還有 () 包括的內容,那麼可以依次用 group(2)、group(3) 等來獲取
“正則心法”第二式--通用匹配
Python大星縱覽群書,發現個重大密碼
通配符無一例外的使用
.*“正則心法”第三式--貪婪與非貪婪
● 什麼是貪婪匹配?
在貪婪匹配下,. 會匹配儘可能多的字符
括號中是 \\d+,
也就是至少一個數字,並沒有指定具體多少個數字,
因此,.* 就儘可能匹配多的字符,這裡就把 123456 匹配了,
給 \\d + 留下一個可滿足條件的數字 7,最後得到的內容就只有數字 7 了。
● 什麼又是非貪婪匹配?
非貪婪匹配就是儘可能匹配少的字符
非貪婪匹配的寫法是 .*?
貪婪匹配就是匹配儘可能多的字符
非貪婪匹配就是匹配儘可能少的字符
“正則心法”第四式--修飾符
當content中含有換行符或者大小寫時
需要紅藍buff加持--“修飾符”
跟隨Python先打紅buff-- re.S(匹配包括換行在內的所有字符)
1234567
再打藍buff -- re.I(使匹配對大小寫不敏感,注意:I是i的大寫)
1234567
“正則心法”第五式--轉義匹配
說到“轉義字符”,萬金油“斜槓”來表示
<re.match>
“正則心法”第六式--search
前面五式,我們使用的match方法是從字符串的開頭開始匹配的,
一旦開頭不匹配,那麼整個匹配就失敗了
Python大星傳授你新的一招--search
在匹配時,search 方法會依次掃描字符串,直到找到第一個符合規則的字符串,然後返回匹配內容,如果搜索完了還沒有找到,就返回 None。
“正則心法”第七式--findall
第六式 我們能輕鬆的用search方法獲取匹配正則表達式的第一個內容
但是...
當我想要匹配所有符合正則表達式的所有內容呢?
['1234567', '7654321']
“正則心法”第八式--sub
除了使用正則表達式提取信息外,有時候還需要藉助它來修改文本
Python
“正則心法”第九式--compile
最後,Python傳授畢生功力
準備好接收了嗎?
將正則字符串編譯成正則表達式對象,以便在後面的匹配中複用
呼氣,吸氣,收!!!
這套《正則心法》你
get到了嗎?閱讀更多 Python大星 的文章