正则替换数据

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

     

posted @ 2020-10-09 15:40  鲲尘轻杳  阅读(418)  评论(0编辑  收藏  举报