前言:
我們在做接口自動化的時候,處理接口依賴的相關數據時,通常會使用正則表達式來進行提取相關的數據,今天在這邊和大家聊聊如何在python中使用正則表達式。在python使用正則表達式,可以使用官方庫re來實現
一、re模塊的使用
在python中使用正則表達式,需要用到re模塊來進行操作,這邊給大家介紹幾個re模塊中常用的方法。
1、re.match函數
參數說明:接收兩個參數,
- 第一個是匹配的規則,
- 第二個是匹配的目標字符串,
re.match嘗試從字符串的起始位置匹配一個模式,匹配成功 返回的是一個匹配對象(這個對象包含了我們匹配的信息),如果不是起始位置匹配成功的話,match()返回的就是空。
案例:
2、re.search方法
參數說明:接收兩個參數,
- 第一個是匹配的規則,
- 第二個是匹配的目標字符串,
re.search 掃描整個字符串並返回第一個成功的匹配。
案例:
re.match與re.search的區別
- re.match從字符串的開始位置進行匹配,如果字符串開始不符合正則表達式,則匹配失敗,函數返回空;
- 而re.search匹配整個字符串,直到找到一個匹配成功的則進行返回,如果整個字符串中都沒有找到匹配成功的,則返回空
3、findall方法
參數說明:接收兩個參數,
- 第一個是匹配的規則,
- 第二個是匹配的目標字符串,
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
案例:
注意: match 和 search 是匹配一個結果, findall 匹配處所有符合規則的結果。
4、sub方法
替換字符串中的某些字符,可以用正則表達式來匹配被選子串。
re.sub(pattern, repl, string, count=0 )
參數:
- pattern:匹配的規則;
- repl:匹配之后替換的新內容;
- string:需要按規則替換的字符串;
- count:替換的次數,可以不傳參,默認替換所有符合規則的。
案例:
5、貪婪模式說明:
貪婪模式:Python里數量詞默認是貪婪的,總是嘗試匹配盡可能多的字符;
如下案例:有一個字符串s,我們需要在字符串中匹配3個以上的數字,字符串中數字有8個,貪婪模式會盡可能匹配更多字符,3個以上,8個也是3個以上,那么這里匹配的結果就是8個數字。
非貪婪模式:總是嘗試匹配盡可能少的字符,在"*","?","+","{m,n}",{m,}后面加上?,可以關閉貪婪模式
關閉貪婪模式之后,盡可能獲取更少的,如下,只獲取到最前面的3個數值(規則時至少3個,非貪婪就是匹配最前面符合規則的3個數組)
關於re模塊,更多的使用方法,本文不做過多的介紹,大家自行研究,謝謝!下面附上正則表達式的基本的匹配供大家參考
二、正則表達式語法
1、表示單字符
單字符:即表示一個單獨的字符,比如匹配數字用\d ,匹配非數字使用\D,具體規則如下:
字符 |
功能 |
. |
匹配任意1個字符(\n除外) |
[7a ] |
匹配[ ]中列舉的字符,這里就是匹配7或者a這兩個字符其中的一個 |
\d |
匹配數字,即0-9 |
\D |
匹配非數字,即不是數字 |
\s |
匹配空白,即 空格,tab鍵 |
\S |
匹配非空白 |
\w |
匹配單詞字符,即a-z、A-Z、0-9、_ |
\W |
匹配非單詞字符 |
2、表示數量
如果要匹配某個字符多次,就可以在字符后面加上數量進行表示,具體規則如下:
字符 |
功能 |
* |
匹配前一個字符出現0次或者無限次,即可有可無 |
+ |
匹配前一個字符出現1次或者無限次,即至少有1次 |
? |
匹配前一個字符出現1次或者0次,即要么有1次,要么沒有 |
{m} |
匹配前一個字符出現m次 |
{m,} |
匹配前一個字符至少出現m次 |
{m,n} |
匹配前一個字符出現從m到n次 |
3、表示邊界
用來表示字符串或者單詞的邊界 如字符串開頭,單詞開頭等
字符 |
功能 |
^ |
匹配字符串開頭 |
$ |
匹配字符串結尾 |
\b |
匹配單詞的邊界 |
\B |
匹配非單詞邊界 |
4、匹配分組
對匹配的內容做分組處理
字符 |
功能 |
(aaa) |
將括號中字符作為一個分組 |
\number |
引用分組number匹配到的字符串 |
(?P<g1>) |
分組起別名為g1 |
(?P=g1) |
引用別名為g1分組匹配到的字符串 |