Python爬蟲 正規表示式

2021-08-21 03:32:29 字數 3041 閱讀 3397

一般的正規表示式都可直接到正則生成工具處生成,

常見匹配字元

re.match及其常規匹配

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

re.match(pattern, string, flags = 0)

返回的為乙個物件,其中span代表長度 加上group方法會返回資料資訊 加上span方法會返回長度

泛匹配匹配目標

使用()來表示想要返回的group 其中第乙個()為group(1),第二個為group(2)

貪婪匹配

貪婪模式中.* 會盡可能多的匹配,從而匹配了123456。貪婪模式為正則的預設匹配模式

非貪婪匹配

通過加上?,轉換為非貪婪模式,從而盡可能少的匹配,如下例對於1234567,並無匹配,可以理解為,通過?讓*.變的懶惰了

匹配模式

匹配模式即為flag引數. 下例中,由於不能匹配換行符,不配置flag會返回none;故需要將匹配模式變為re.s,*.即可匹配任意字元

轉義

字元中會出現轉義字元,如$,.等,需要通過加上反斜槓\來表示後面的字元為轉義字元

總結:盡量使用泛匹配、使用括號得到匹配目標、盡量使用非貪婪模式、有換行符就用re.s

re.search

re.search 掃瞄整個字串並返回第乙個成功的匹配。相比於re.match,re.search不需要從第乙個字元開始匹配。

案例1:

使用re.search篩選html內容

re.findall

從上例中,可以發現match和search都有一定的限制性,即不可以返回符合條件的所有字元。所以一般在進行爬蟲時會使用findall方法會更多一點。findall方法會搜尋字串,以列表形式返回全部能匹配的子串。

改進:上例中,並沒有篩選出第一條資料,這是由於第一條資料沒有a標籤

用\s?表示換行(\s代表空白字元,

表示有乙個或多個,?表示可有可沒有)

用()可表示裡面內容為乙個整體,()?表示()內內容可有可無

results = re.findall('\s*?()?(\w+)()?\s*?', html, re.s)

print(results)

for result in results:

print(result[1])

re.sub

替換字串中每乙個匹配的子串後返回替換後的字串

import re

​content = 'extra stings hello 1234567 world_this is a regex demo extra stings'

content = re.sub('\d+', '', content)

print(content)

extra stings hello world_this is a regex demo extra stings

​content = 'extra stings hello 1234567 world_this is a regex demo extra stings'

content = re.sub('\d+', 'replacement', content)

print(content)

extra stings hello replacement world_this is a regex demo extra stings

\1表示要被替換的第乙個group

​content = 'extra stings hello 1234567 world_this is a regex demo extra stings'

content = re.sub('(\d+)', r'\1 8910', content)

print(content)

extra stings hello 1234567 8910 world_this is a regex demo extra stings

re.sub和re.findall共同配合進行資訊提取對於歌詞的例子,實際上通過sub先將a標籤刪去再進行findall會更加簡單

html = re.sub('|', '', html)

print(html)

import re

)print(results)for result in results: print(result.strip())結果:一路上有你 滄海一聲笑 往事隨風 光輝歲月 記事本 但願人長久

re.compile

re.compile將正則字串編譯成正規表示式物件

將乙個正規表示式串編譯成正則物件,以便於復用該匹配模式

content = '''hello 1234567 world_this

is a regex demo'''

pattern = re.compile('hello.*demo', re.s)

result = re.match(pattern, content)

#result = re.match('hello.*demo', content, re.s)

print(result)

<_sre.sre_match object span="(0," match="hello 1234567 world_this\nis a regex demo">

python爬蟲 正規表示式

正規表示式是十分高效而優美的匹配字串工具,一定要好好掌握。利用正規表示式可以輕易地從返回的頁面中提取出我們想要的內容。1 貪婪模式與非貪婪模式 python預設是貪婪模式。貪婪模式,總是嘗試匹配盡可能多的字元 非貪婪模式,總是嘗試盡可能少的字元。一般採用非貪婪模式來提取。2 反斜槓問題 正規表示式裡...

Python 爬蟲 正規表示式

常見的正則字元和含義如下 匹配任意字元,除了換行符 匹配字串開頭 匹配字串末尾 匹配括號內表示式,也表示乙個組 s 匹配空白字元 s 匹配任何非空白字元 d 匹配數字,等價於 0 9 d 匹配任何非數字,等價於 0 9 w 匹配字母數字,等價於 a za z0 9 w 匹配非字母數字,等價於 a z...

Python爬蟲 正規表示式

正規表示式就是使用簡潔的特徵表示一組很長的字串。比如 lpppppppp 是一串很長的字串,用正規表示式表示為 lp 操作符說明例項.表示任何單個字元 字符集,對單個字元給出取值範圍 a,s 表示字元a,s,a s 表示從a到s的字元 非字符集,對單個字元給出排除範圍 與上乙個操作符相反,表示排除方...