1. 程式人生 > 其它 >vs找不到與以下引數匹配的產品_巧用正則表示式,完成介面引數替換

vs找不到與以下引數匹配的產品_巧用正則表示式,完成介面引數替換

技術標籤:vs找不到與以下引數匹配的產品儲存過程裡面替換字串

最近給Python11期的小朋友們上課,遇到了一個引數替換的問題,首先描述下場景: 需要引數化的資料如下所示:

25557935449830f099b49194b4b61f6e.png

這個時候如果利用單純的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"} 如果是這個字串,你打算怎麼去完成替換呢?參考答案可以找檸檬班的輔導員!