2014-11-25 70 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