正则表达式


 

1、正则表达式使用单个字符串来描述,匹配一系列符合某个句法规则的字符串

2、正则表达式一般包括:原本字符和元字符

3、()表示一个组,通俗的理解就是可以用它来标记一个表达式组的开始和结束

元字符 匹配规则 限定符 匹配次数
.

可以匹配除“\n”和"\r"之外的任何单个字符,汉字、字母、符号、数字

(注意是单个,就是一个)

+ 至少匹配一次
\d 匹配任意单个数字 最多匹配一次
    * 匹配0次或者多次

 

4、例子:
data = '{"mobilephone": "#normal_user#", "pwd": "#normal_pwd#"}'
# 1、正则表达式
p='normal_user' # 原本字符
p='#(.*?)#' # 元字符
# 2、两种查找方式
ms=re.findall(p,data) # 查找全部,返回列表
print(ms) # p='#.*?#' ==>['#normal_user#', '#normal_pwd#']   p='#(.*?)#'==>['normal_user', 'normal_pwd']
m=re.search(p,data) #从data任意位置开始找,找到第一个就返回
print(m) # ==><re.Match object; span=(17, 30), match='#normal_user#'>
print(m.group(0)) # 返回表达式和组里面的内容 ==>#normal_user#
print(m.group(1)) # 只返回指定组里面的内容 ==>normal_user
g=m.group(1)
# 3、根据查找到的key,取配置文件里面同个key的值
v= config.get_strValue("data",g) # 根据Key值取配置文件里面的值
# 4、查找替换
data_new=re.sub(p,v,data,count=1) # 查找替换(p:正则表达式,v:替换的内容,data:原本目标,count:查找替换次数(0表示全部替换))
print(data_new)
# 如果要匹配多次,替换多次,使用循环来解决
while re.search(p,data):
    print(data) # 第一次:{"mobilephone": "#normal_user#", "pwd": "#normal_pwd#"} 第二次:{"mobilephone": "18825046772", "pwd": "#normal_pwd#"}
    m = re.search(p, data)  # 从data任意位置开始找,找到第一个就返回Match object,如果没有就返回None
    g = m.group(1) # 拿到参数化的KEY
    v = config.get_strValue("data", g) # 根据Key值取配置文件里面的值
    # 记得替换后的内容,继续用data接收
    data = re.sub(p, v, data, count=1)  # 查找替换(p:正则表达式,v:替换的内容,data:原本目标,count:查找替换次数(0表示全部替换))
print(data) #替换后的最终结果:{"mobilephone": "18825046772", "pwd": "123456"}

封装成一个函数
import re
from homework.exam_homework_0413.common.read_config import config
def replace(data,patten = '#(.*?)#'):
    # patten = '#(.*?)#' # 正则表达式
    print("替换前的data:{}".format(data))
    while re.search(patten, data):
        m = re.search(patten, data)  # 从data任意位置开始找,找到第一个就返回Match object,如果没有就返回None
        g = m.group(1)  # 拿到参数化的KEY
        v = config.get_strValue("data", g)  # 根据Key值取配置文件里面的值
        # 记得替换后的内容,继续用data接收
        data = re.sub(patten, v, data, count=1)  # 查找替换(p:正则表达式,v:替换的内容,data:原本目标,count:查找替换次数(0表示全部替换))
        print("替换后的data:{}".format(data))
    return data
 

posted on 2019-04-24 18:27  exam  阅读(302)  评论(0编辑  收藏  举报

导航