爬蟲之正規表示式基礎篇

2021-09-08 19:34:43 字數 3294 閱讀 6152

一 點睛

1 正規表示式工具

2 測試一下

3 說明

其實,這裡就是用了正規表示式匹配,也就是用一定的規則將特定的文字提取出來。比如,電子郵件開頭是一段字串,然後是乙個@符號,最後是某個網域名稱,這是有特定的組成格式的。

二 常用的匹配規則模式

描述\w

匹配字母、數字及下劃線

\w匹配不是字母、數字及下劃線的字元

\s匹配任意空白字元,等價於[\t\n\r\f]

\s 匹配任意非空字元

\d匹配任意數字,等價於[0-9]

\d匹配任意非數字的字元

\a匹配字串開頭

\z匹配字串結尾,如果存在換行,只匹配到換行前的結束字串

\z匹配字串結尾,如果存在換行,同時還會匹配換行符

\g匹配最後匹配完成的位置

\n匹配乙個換行符

\t匹配乙個製表符

匹配一行字串的開頭

匹配一行字串的結尾

匹配任意字元,除了換行符,當re.dotall標記被指定時,則可以匹配包括換行符的任意字元

用來表示一組字元,單獨列出,比如[amk]匹配a、m或k

不在中的字元,比如[^abc]匹配除了a、b、c之外的字元

匹配0個或多個表示式

匹配1個或多個表示式

匹配0個或1個前面的正規表示式定義的片段,非貪婪方式

精確匹配n個前面的表示式

匹配n到m次由前面正規表示式定義的片段,貪婪方式

a|b匹配a或b

匹配括號內的表示式,也表示乙個組

python的re庫提供了整個正規表示式的實現,利用這個庫,可以在python中使用正規表示式。在python中寫正規表示式幾乎都用這個庫。

三 match()的使用

1 點睛

向match傳入要匹配的字串以及正規表示式,就可以檢測這個正規表示式是否匹配字串。該方法會嘗試從字串的起始位置匹配正規表示式,如果匹配,就返回匹配成功的結果;如果不匹配,就返回none。

2 基本用法

2.1 **

import re

# 首先宣告了乙個字串,其中包含英文本母、空白字元、數字等。

content = 'hello 123 4567 world_this is a regex demo'

print(len(content))

# 用正規表示式去匹配這個字串

result = re.match('^hello\s\d\d\d\s\d\s\w', content)

print(result)

print(result.group())

print(result.span())

2,2 執行結果

e:\webspider\venv\scripts\python.exe e:/webspider/3_3.py

41<_sre.sre_match object span="(0," match="hello 123 4567 world_this">

hello 123 4567 world_this

(0, 25)

2.3 說明

正規表示式開頭的^是匹配字串的開頭,也就是以hello開頭;然後\s匹配空白字元,用來匹配目標字串的空格;\d匹配數字,3個\d匹配123;然後再寫1個\s匹配空格;後面還有4567,我們其實可以依然用4個\d來匹配,但是這麼寫比較煩瑣,所以後面可以跟以代表匹配前面的規則4次,也就是匹配4個數字;然後後面再緊接1個空白字元,最後\w匹配10個字母及下劃線。我們注意到,這裡其實並沒有把目標字串匹配完,不過這樣依然可以進行匹配,只不過匹配結果短一點而已。

而在match()方法中,第乙個引數傳入了正規表示式,第二個引數傳入了要匹配的字串。

列印輸出結果,可以看到結果是sre_match物件,這證明成功匹配。該物件有兩個方法:group()方法可以輸出匹配到的內容,結果是hello 123 4567 world_this,這恰好是正規表示式規則所匹配的內容;span()方法可以輸出匹配的範圍,結果是(0, 25),這就是匹配到的結果字串在原字串中的位置範圍。

3 匹配目標

3.1 **

# 使用()括號將想提取的子字串括起來。

# ()實際上標記了乙個子表示式的開始和結束位置,被標記的每個子表示式會依次對應每乙個分組,

# 呼叫group()方法傳入分組的索引即可獲取提取的結果。

import re

content = 'hello 1234567 world_this is a regex demo'

# 這裡我們想把字串中的1234567提取出來,此時可以將數字部分的正規表示式用()括起來

# ,然後呼叫了group(1)獲取匹配結果。

result = re.match('^hello\s(\d+)\sworld', content)

print(result)

print(result.group())

print(result.group(1))

print(result.span())

3.2 執行結果

e:\webspider\venv\scripts\python.exe e:/webspider/3_3.py

41<_sre.sre_match object span="(0," match="hello 123 4567 world_this">

hello 123 4567 world_this

(0, 25)

<_sre.sre_match object span="(0," match="hello 1234567 world">

hello 1234567 world

1234567

(0, 19)

3.3 說明

可以看到,我們成功得到了1234567。這裡用的是group(1),它與group()有所不同,後者會輸出完整的匹配結果,而前者會輸出第乙個被()包圍的匹配結果。假如正規表示式後面還有()包括的內容,那麼可以依次用group(2)、group(3)等來獲取。

正規表示式 py爬蟲篇

re.match試著從字串的起始位置匹配乙個模式,若不能從起始位置匹配成功,match 就返回none.import re content hello 123 4567 world this demo res re.match hello s d d d s d s w sdemo content ...

Python 正規表示式(爬蟲篇)

實際上爬蟲有四個主要步驟 取 去掉對我們沒用處的資料 處理資料 按照我們想要的方式儲存和使用 我們爬下來的資料大部分都是全部的網頁,這些資料有時候是很龐大並且混亂的,大部分的董事是我們不關心的,所以我們需要將之按我們的需要過濾和匹配出來。那麼對於文字的過濾或者規則的匹配,最強大的就是正規表示式,是 ...

正規表示式 基礎篇

人類的常規表達方式在文字查詢和處理方面是薄弱的,特別是一些複雜的文字處理。這時候有人發明了正規表示式這一非常規表達方式進行複雜的文字處理。如果你不是很懂正則,那麼你一定不是乙個合格的程式設計師,甚至不如乙個很會處理文件辦公室文員 當然了,現在很少有人會在乎這一點。但我們自己還是要有點追求,書到用時方...