python 自動化數(shù)據(jù)提取之正則表達(dá)式
前 言
我們在做接口自動化的時候,處理接口依賴的相關(guān)數(shù)據(jù)時,通常會使用正則表達(dá)式來進(jìn)行提取相關(guān)的數(shù)據(jù),今天在這邊和大家聊聊如何在python中使用正則表達(dá)式。
正則表達(dá)式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達(dá)式、規(guī)則表達(dá)式、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),是計算機(jī)科學(xué)的一個概念。
正則表達(dá)式使用單個字符串來描述、匹配一系列匹配某個句法規(guī)則的字符串。按某種規(guī)則匹配的表達(dá)式被稱之為正則表達(dá)式,在python使用正則表達(dá)式,可以使用官方庫re來實現(xiàn),學(xué)習(xí)re模塊之前,我們先來了解一下正則表達(dá)式的基本語法。
正 則 表 達(dá) 式 語 法
表示單字符
單字符:即表示一個單獨的字符,比如匹配數(shù)字用\d ,匹配非數(shù)字使用\D,具體規(guī)則如下:
表示數(shù)量
如果要匹配某個字符多次,就可以在字符后面加上數(shù)量進(jìn)行表示,具體規(guī)則如下:
表示邊界
匹配分組
貪婪模式
貪婪模式:Python里數(shù)量詞默認(rèn)是貪婪的,總是嘗試匹配盡可能多的字符;
如下案例:有一個字符串s,我們需要在字符串中匹配3個以上的數(shù)字,字符串中數(shù)字有8個,貪婪模式會盡可能匹配更多字符,3個以上,8個也是3個以上,那么這里匹配的結(jié)果就是8個數(shù)字。
非貪婪模式:總是嘗試匹配盡可能少的字符,在"*“,”?“,”+“,”",后面加上?,可以關(guān)閉貪婪模式
關(guān)閉貪婪模式之后,盡可能獲取更少的,如下,只獲取到最前面的3個數(shù)值(至少3個,非貪婪就是最前面的3個)
r e 模 塊 的 使 用
在python中使用正則表達(dá)式,需要用到re模塊來進(jìn)行操作,這邊給大家介紹幾個re模塊中常用的方法。
No.1 re.match函數(shù)
參數(shù)說明:接收兩個參數(shù),
第一個是匹配的規(guī)則,
第二個是匹配的目標(biāo)字符串,
re.match嘗試從字符串的起始位置匹配一個模式,匹配成功 返回的是一個匹配對象(這個對象包含了我們匹配的信息),如果不是起始位置匹配成功的話,match()返回的就是空。
No.2 re.search 方法
參數(shù)說明:接收兩個參數(shù),
第一個是匹配的規(guī)則,
第二個是匹配的目標(biāo)字符串,
re.search 掃描整個字符串并返回第一個成功的匹配。
re.match與re.search的區(qū)別
re.match從字符串的開始位置進(jìn)行匹配,如果字符串開始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回空;
而re.search匹配整個字符串,直到找到一個匹配成功的則進(jìn)行返回,如果整個字符串中都沒有找到匹配成功的,則返回空。
No.3 findall 方法
參數(shù)說明:接收兩個參數(shù),
第一個是匹配的規(guī)則,
第二個是匹配的目標(biāo)字符串,
在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。
注意:match 和 search 是匹配一個結(jié)果, findall 匹配處所有符合規(guī)則的結(jié)果。
No.4 sub 方法
替換字符串中的某些字符,可以用正則表達(dá)式來匹配被選子串。
re.sub(pattern, repl, string, count=0 )
參數(shù):
pattern:匹配的規(guī)則;
repl:匹配之后替換的新內(nèi)容;
string:需要按規(guī)則替換的字符串;
count:替換的次數(shù),可以不傳參,默認(rèn)替換所有符合規(guī)則的。
案 例 演 示
需求:整個正則表達(dá)式提取如下接口登錄之后返回的token值。
接口地址:http://47.112.233.130/users/login/
請求參數(shù):
返回結(jié)果:
{'refresh': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY1Mzk4MzMyNSwiaWF0IjoxNjUzODk2OTI1LCJqdGkiOiI2NTE2MTE0OGFhMDY0NWNjYWY2ZWE4YmYzYzY1YjE1ZSIsInVzZXJfaWQiOjJ9.fMkJfOdhczbr1MqvYE5b0qYlC5GewBlFZbrteMOLUv0', 'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjUzOTgzMzI1LCJpYXQiOjE2NTM4OTY5MjUsImp0aSI6ImQ3Nzg1ZjY0YTk2YzQwYzliZDcwMmUxMDgzNjVkNWU5IiwidXNlcl9pZCI6Mn0.UNmLRQsXnZBltgL7QQVuBON2UEBQav87NSGy5Iqbnws'}
實現(xiàn)代碼
import requests import re # 登錄接口 login_url = 'http://47.112.233.130:8888/users/login/' # 請求登錄接口,進(jìn)行登錄 params = { "username": "test", "password": "123456" } response = requests.post(url=login_url, json=params) #使用正則表達(dá)式提取token result = re.search(r'token":"(.+?)"',response.text) token = result.group(1)
到此這篇關(guān)于python 自動化數(shù)據(jù)提取之正則表達(dá)式的文章就介紹到這了,更多相關(guān)python 數(shù)據(jù)提取正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python報錯ImportError: No module named ‘mi
在 Python 開發(fā)過程中,報錯是常有的事,而當(dāng)遇到“ImportError: No module named ‘missing_module’”這樣的報錯時,可能會讓開發(fā)者感到困惑和苦惱,本文將深入探討這個報錯的原因和解決方法,幫助開發(fā)者快速解決這個問題,需要的朋友可以參考下2024-10-10Python發(fā)布 Web應(yīng)用的常見方法及詳細(xì)步驟
本文詳細(xì)介紹了Python發(fā)布Web應(yīng)用的常見方法,包括本地開發(fā)、Nginx+Gunicorn部署、Heroku一鍵部署、Docker容器化部署和Serverless部署,并提供了每種方法的詳細(xì)步驟和優(yōu)缺點對比,需要的朋友可以參考下2025-03-03如何導(dǎo)出python安裝的所有模塊名稱和版本號到文件中
Python 模塊(Module),是一個 Python 文件,以 .py 結(jié)尾,包含了 Python 對象定義和Python語句。這篇文章主要介紹了如何導(dǎo)出python安裝的所有模塊名稱和版本號到文件中,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-06-06