正則替換資料
(1)匹配規則:元字元+限定符
常用反義詞 | 常用限定符 | |
---|---|---|
.:匹配任意一個字元(除了\n) res1 = r"." res =re.findall(res1,"s1?") 引數1:匹配規則 引數2:要匹配的字元 ---》['s','1','?'] |
*重複零次或更多次 | |
\d:匹配數字,0-9 res3= r"\d" res =re.findall(res3,"123a6") 引數1:匹配規則 引數2:要匹配的字元 ---》['1','2','3','6'] |
\D:匹配非數字,即不是數字 res4= r"\D" res =re.findall(res4,"123a6\n") 引數1:匹配規則 引數2:要匹配的字元 ---》['a','\n'] |
+重複一次或更多次 |
\s:匹配空白,即空格。tab鍵 res5= r"\s" res =re.findall(res5,"12 3a 6") 引數1:匹配規則 引數2:要匹配的字元 ---》[' ',' ',' ']# tab鍵兩個空白 |
\S:匹配非空白 res6= r"\s" res =re.findall(res6,"12 3a 6") 引數1:匹配規則 引數2:要匹配的字元 ---》['1',' 2',' 3','6'] |
?重複零次或一次(在給定返回後加?,變成非貪婪模式,匹配最少的) |
\w:匹配單詞字元,即a-z,A-Z,0-9,單詞,字母,下劃線 res7= r"\w" res =re.findall(res7,"1_a?6\n") 引數1:匹配規則 引數2:要匹配的字元 ---》['1','_','a','6'] |
\W:匹配非單詞字元 res8= r"\W" res =re.findall(res8,"1_a?6\n") 引數1:匹配規則 引數2:要匹配的字元 ---》['?',"\n'] |
{n}匹配一個字元n次 |
^匹配字串的開始 | {n,}匹配一個字元至少n次 | |
$匹配字串的結束 | {n,m}匹配一個字元出現n到m次 | |
\b匹配單詞的邊界 | \B匹配非單詞的邊界 | |
[]:列表中列舉的字元res2= r"[abc]" res =re.findall(res2,"123a6b99cc") 引數1:匹配規則 引數2:要匹配的字元 ---》['a','b','c','c'] |
||
(2) python中通過re模組來處理正則表示式。re模組的常用方法如下:
-
re.match(re規則,字串):從頭開始匹配。從字串的第一個字元開始匹配,返回的是一個匹配物件。如果第一個字元不匹配規則,則匹配失敗。
-
re.search(re規則,字串):匹配包含。查詢第一個符合規範的字串,返回的是一個匹配物件(通過group能找到的資料提取出來,如果沒有找到符合規範的資料,返回的是None)
-
re.findall(re規則,字串):把所有匹配的字元放在列表中並返回。
-
re.sub(re規則,替換串,被替換串,替換次數(非必填,預設替換所有符合規範的字串)):匹配字元並替換。
(3)常用的匹配
-
匹配指定的字串
import re s2 = '{"mobile_phone":"#admin_phone#","pwd":"#admin_pwd#"}' res2 = re.search("#(.+?)#", s2).group() res3 = re.search("#(.*?)#", s2).group() print(res2) # #admin_phone# print(res3) # #admin_phone# ss = '{"mobile_phone":"${admin_phone}","pwd":"#admin_pwd#"}' ress = re.search("\$\{(.*?)\}",ss).group() # $,{,}需要轉譯 print(ress) # ${admin_phone} # group:根據正則表示式中的括號分組,提取分組的資料 ss1 = '{"mobile_phone":"${admin_phone}","pwd":"#admin_pwd#"}' ress1 = re.search("(\$)\{(.*?)\}",ss).group(2) # $,{,}需要轉譯 print(ress1) # {admin_phone}
-
正則替換例項
import re
from com.myconf import conf
def replace_data(data): # 判斷是否有需要替換的資料 while re.search("#(.+?)#", data): # .匹配任意字元,+重複一次或多次,?匹配0次或1次(變成非貪婪模式)()匹配分組:在匹配的資料中提取資料 key = re.search("#(.+?)#", data).group(0) # 字典的鍵 value = re.search("#(.+?)#", data).group(1) # 字典的值 try: data = data.replace(key, conf.get('test_info', value)) # 替換資訊為配置檔案conf.ini中的值 except: data = data.replace(key,getattr(TestData,value)) # 如果滿足條件,且配置檔案中沒有配置資料,則讀取臨時變數的值 return data - 匹配手機號
import re #匹配手機號碼:11位 re = r"1[3456789]\d{9}" # 第1位:1,第2位:3456789中的一個值,後9位匹配數字格式 res = re.findall(re)