2014-11-25 55 views
1

我有類似下面的字符串: -Python的正則表達式掩蓋了字符串鍵值對

"assdd ffdsfad 'result_secret_key': 'dfkfaj&^%2', 'auth_matrix': '213fsdf#', 'password': 'adsfa&&*[email protected]#4' and 'app_auth': 'eff#@DS' dafsdsaf adfs adlsfjasdkjf " 

我需要屏蔽所有含有類似密語,身份驗證,密鑰和密碼的密鑰。

我的意思是說像「result_secret_key」:「*****」

有人建議我一個正則表達式在Python中這樣做。

最終的字符串應該是這樣的: -

"assdd ffdsfad 'result_secret_key': '******', 'auth_matrix': '******','password': '******' and 'app_auth': '******' dafsdsaf adfs adlsfjasdkjf " 

回答

1

使用re.sub功能。

>>> s = "assdd ffdsfad 'result_secret_key': 'dfkfaj&^%2', 'auth_matrix': '213fsdf#', 'password': 'adsfa&&*[email protected]#4' and 'app_auth': 'eff#@DS' dafsdsaf adfs adlsfjasdkjf " 
>>> re.sub(r"('\S*?(?:secret|auth|key|password)\S*?'\s*:\s*')[^']*(?=')", r'\1******', s) 
"assdd ffdsfad 'result_secret_key': '******', 'auth_matrix': '******', 'password': '******' and 'app_auth': '******' dafsdsaf adfs adlsfjasdkjf " 

\S*匹配零個或多個非空格字符和(?:secret|auth|key|password)從給定的列表中的單個字相匹配。

1

阿維納什Raj的答案可能是更好的... ... 但這裏是另一個:

re.sub(": '.*?'",r": '***'",s) 
0
('[^']*?(?=secret|auth|key|password)[^']*':\s*')[^']*' 

嘗試this.Replace通過\1****'。看到演示。

http://regex101.com/r/rA7aS3/12

import re 
p = re.compile(ur'(\'[^\']*?(?=secret|auth|key|password)[^\']*\':\s*\')[^\']*\'') 
test_str = u"assdd ffdsfad 'result_secret_key': 'dfkfaj&^%2', 'auth_matrix': '213fsdf#', 'password': 'adsfa&&*[email protected]#4' and 'app_auth': 'eff#@DS' dafsdsaf adfs adlsfjasdkjf " 
subst = u"\1****'" 

result = re.sub(p, subst, test_str) 
+0

感謝regex101.com! – enthus1ast 2014-11-25 15:32:56