一般的正規表示式都可直接到正則生成工具處生成,
常見匹配字元
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的字元 非字符集,對單個字元給出排除範圍 與上乙個操作符相反,表示排除方...