接口参数替换难题,秒用正则表达式四两拨千斤

最近有个粉丝私信我,遇到了一个参数替换的问题,首先描述下场景:
需要参数化的数据如下所示:

这个时候如果利用单纯的 if 判断和字符串的 find 和 replace 方法,做起来是非常不明智的!代码量也非常多,也非常容易的混淆!
这个时候,如果引入正则表达式,就可以非常轻松的解决这个问题!!
先分步骤分模块了解下正则表达式这个新鲜玩意!

正则是什么

用一句通俗易懂的话来说:符合一定规则的字符来匹配我们自己想要的内容!

如何学习正则

python 有一个专门的正则模块 re,终于如何使用这些,我当然不会说 😎 ~网络上资源很多,but,我这边有系统的资料,有需要的朋友可以私信关键词“资料”获取

我们实用的场景步骤

1:准备一个 get_data 模块,里面有个 GetData 类,代码如下,存储我们各类想要的数据属性值:

  class GetData:
    admin_tel='18688773467'
    loan_member_id='23357'
    normal_tel='18688773468'
    memberID='23456'
    loanId='12232'

2:要替换的参数,我们先举个例子,如下所示:

  {"mobilephone":"${admin_tel}","pwd":"123456"}

正则表达式是:${(.*?)}

重点普及以下 search 函数:
re.search("${(.*?)}",s) :该函数的作用是会返回遇到的第一个符合的匹配值,如果不存在就返回 None

re.search("${(.*?)}",s).group():group()等同于 group(0)函数,返回的是匹配的整个字符串

re.search("${(.*?)}",s).group(1):group(1)函数,返回的是匹配的第一个括号里面的字符串

我们如何完成参数里面的正则匹配呢?代码如下:

      key=re.search("\$\{(.*?)\}",s).group()#要替换的对象
    value=re.search("\$\{(.*?)\}",s).group(1)#根据这个可以到GetData里面拿到对应的value值,这里需要利用反射
    s=s.replace(key,str(getattr(GetData,value)))#完成替换,注意getattr的用法
    print(s)

留下练习题:
{"memberId":"memberID","password":"123456","loanId":"{loanId}","amount":"-100"}
如果是这个字符串,你打算怎么去完成替换呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢软测的小北葵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值