一 正則常識
模式 | 描述 |
---|---|
\w |
匹配字母數字及下划線 |
\W |
匹配非字母數字及下划線 |
|
匹配任意空白字符,等價於 [\t\n\r\f]. |
\S |
匹配任意非空字符 |
\d |
匹配任意數字,等價於 [0-9] |
\D |
匹配任意非數字 |
\A |
匹配字符串開始 |
\Z |
匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串 |
\z |
匹配字符串結束 |
\G |
匹配最后匹配完成的位置 |
\n |
匹配一個換行符 |
\t |
匹配一個制表符 |
^ |
匹配字符串的開頭 |
$ |
匹配字符串的末尾 |
. |
匹配任意字符,除了換行符 |
[...] |
用來表示一組字符,單獨列出:[amk] 匹配 'a','m' 或 'k' |
[^...] |
不在 [] 中的字符:[^abc]匹配除了 a,b,c 之外的字符。 |
* |
匹配 0 個或多個的表達式。 |
+ |
匹配 1 個或多個的表達式。 |
? |
匹配 0 個或 1 個由前面的正則表達式定義的片段,非貪婪方式 |
{n} |
精確匹配 n 個前面表達式。 |
{n, m} |
匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式 |
a \| b |
匹配 a 或 b |
( ) |
匹配括號內的表達式,也表示一個組 |
二 pythoon正則中的常見方法
函數 | 描述 |
---|---|
re.match(pattern, string, flags=0) |
嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none |
re.search(pattern, string, flags=0) |
掃描整個字符串並返回第一個成功的匹配 |
re.sub(pattern, repl, string, count=0) |
用於替換字符串中的匹配項,repl : 替換的字符串,也可為一個函數 |
re.compile(pattern[, flags]) |
用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用 |
findall(string[, pos[, endpos]]) |
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表 |
re.split(pattern, string[, maxsplit=0, flags=0]) |
能夠匹配的子串將字符串分割后返回列表 |
三 修飾符總結
修飾符 | 描述 |
---|---|
re.I |
使匹配對大小寫不敏感 |
re.L |
做本地化識別(locale-aware)匹配 |
re.M |
多行匹配,影響 ^ 和 $ |
re.S |
使 . 匹配包括換行在內的所有字符 |
re.U |
根據Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B. |
re.X |
該標志通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。 |
四 爬蟲正則解析數據實例(源碼)
# re 解析,下載嗅事百科圖片 import requests import re import os url='https://www.qiushibaike.com/pic/' headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36' } response=requests.get(url=url,headers=headers) # print(response.text) '''
#網頁中需要的數據格式為:
<div class="thumb"> <a href="/article/121553539" target="_blank"> <img src="//pic.qiushibaike.com/system/pictures/12155/121553539/medium/8FN1C2RZMV2J1FJY.jpg" alt="抖音上的騙子"> </a> </div> ''' #利用re獲取圖片url ex='<div class="thumb">.*?<img src="(?P<img>.*?)" alt.*?</div>' img_url_list=re.findall(ex,response.text,re.S) #持久化保存圖片 if not os.path.exists('qiushibaike'): os.makedirs('qiushibaike') for url in img_url_list: url='https:'+url img_data=requests.get(url=url).content img_name=url.split('/')[-1] path='qiushibaike/'+img_name with open(path,mode='wb') as f: f.write(img_data) print(img_name+'下載完成')