1. 程式人生 > 實用技巧 >正則替換資料

正則替換資料

(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)