Python爬蟲--- 1.4 正則表達式:re庫

原文連接:www.fkomm.cn/article/201…html

想要學習爬蟲,正則表達式是必定繞不過去的一關。正則表達式是咱們在篩選文本數據是常常使用的利器。簡單來講,一個正則表達式表達了符合這一規則的一系列的文本。python

從「通配符」到正則表達式

玩linux的同窗在bash裏必定常常用下面這一段代碼:linux

$ rm -rf /*.txt·正則表達式

這裏其實就是一個很是簡單的刪除當前目錄下全部txt文件的命令, *號其實就一個 ‘通配符’。表示任何形式的數據。 從這裏咱們就能夠引出正則表達式的概念:bash

正則表達式是用來簡潔表達一組字符串的表達式,或者你能夠將它理解爲高級版的 通配符 表達式函數

  • 舉個例子:
import re

test = 'python is the best language , pretty good !'

p = re.findall('p+',test)

print(p)

''' OUT: ['p', 'p'] '''
複製代碼

正則表達式的語法:

來一套言簡意賅的圖:學習

來幾個正則表達式的栗子:ui

經常使用的正則表達實例:

注意一下 : $ 表示結束匹配spa

Python的re庫的基本使用

re庫是Python內置的標準庫,因此咱們不用安裝,直接import re就能直接使用。3d

re庫有着很是強大的功能!學好re庫對咱們爬蟲的編寫有極大的幫助!

# re庫 採用了 raw string 類型來表示正則表達式,

# 例如:

re1 = r'[1-9]\d{5}'

# 這裏的正則表示1一個1~9的數字和5個0~9的數字

# 如:1000 就符合re標準
複製代碼

使用raw string 的好處是 咱們不用手動去再次寫轉義字符了。若是不用raw string 類型, 上面的正則表達式咱們就得這麼寫:

re1 = '[1-9]\\d{5}'

re庫的主要功能函數:

咱們着重講一下 re.search這個函數:

''' re.search(pattern, string, flags=0) 在一個字符串中搜索匹配正則表達式的第一個位置 返回match對象 ∙ pattern : 正則表達式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正則表達式使用時的控制標記 ''' 
str1 = 'hello , world ,life is short ,use Python .WHAT? '
    
a = re.search(r'\w+',str1)
print(a.group())    # hello
複製代碼

能夠看到 咱們成功找到了第一個 字符串 「hello」。

  • 經常使用的第三個參數 flags:
re.IGNORECASE:忽略大小寫,同 re.I。

re.MULTILINE:多行模式,改變

和$的行爲,同
re.M。

re.DOTALL:點任意匹配模式,讓’.’能夠匹配包括’\n’在內的任字符,同 re.S。
複製代碼

咱們來使用一下控制標記試試:

str1 = 'hello , world ,life is short ,use b = re.search(r'w.+D',str1,re.I) print(b.group()) # world 複製代碼

能夠看到r'w.+D' 成功匹配到了world。

咱們再來講另外一個經常使用函數re.findall()

''' re.findall(pattern, string, flags=0) 搜索字符串,以列表類型返回所有能匹配的子串 ∙ pattern : 正則表達式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正則表達式使用時的控制標記 '''

c = re.findall(r'\w+',str1)
print (c)
#['hello', 'world', 'life', 'is', 'short', 'use', 'Python', 'WHAT']
複製代碼

能夠看到,咱們找整個字符串中的全部單詞,而且以列表類型反回了。

好了,剩下的函數用法基本和上面類似,都很簡單的。用的時候稍微看一下參數就能夠。我就不一一介紹了。

re庫的另外一種用法

在前面的例子中,咱們都是在調用方法是傳入一個原生字符串來表示re表達式,可是在屢次搜索符合同一規則的數據時,這樣作就會使得效率大大下降。相對應的咱們有替代的作法。

str2 = 'hssso'
re1 = re.compile(r'h.{3}o')
print(re1.findall(str1))
print(re1.findall(str2))
# ['hello']
# ['hssso']
複製代碼

這樣,先把正則進行編譯,在進行查找,就能大量節省時間,增長效率。

關於Match 對象:

match對象是一次匹配的結果,他包含了不少的信息:

''' match 對象的屬性 .string : 待匹配的文本 .re : 匹配時使用的patter對象(正則表達式) .pos : 正則表達式搜索文本的開始位置 .endpos : 正則表達式搜索文本的結束位置 '''
d = re.search(r'e.+d',str1)
print(d.group()) # ello , world
print (d.string) # hello , world ,life is short ,use Python .WHAT?
print (d.re) # re.compile('e.+d')
print (d.pos) # 0
print (d.endpos) # 48
複製代碼

好了,關於re庫,咱們暫時就先介紹到這裏,

只是介紹了一些淺顯的用法,re庫還有不少更加高級的用法,

我會在之後的實戰裏慢慢展示。

說到實戰,寫簡單爬蟲的基礎我們已經都掌握了。


相關文章和視頻推薦

圓方圓學院聚集 Python + AI 名師,打造精品的 Python + AI 技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。

公開課地址:ke.qq.com/course/3627…

加入python學習討論羣 78486745 ,獲取資料,和廣大羣友一塊兒學習。

圓方圓python技術討論羣
圓方圓python技術討論羣
相關文章
相關標籤/搜索