最近給Python11期的小朋友們上課,遇到了一個參數替換的問題,首先描述下場景: 需要參數化的數據如下所示:
這個時候如果利用單純的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"} 如果是這個字符串,你打算怎么去完成替換呢?參考答案可以找檸檬班的輔導員!