Python正则表达式掩盖字符串中的键值对

时间:2014-11-25 14:36:02

标签: python regex key-value masking

我有一个如下字符串: -

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

我需要屏蔽包含secret,auth,key和password等字样的所有密钥。

我的意思是说'result_secret_key':'*****'

有人可以建议我使用Python进行正则表达式。

最终字符串应如下所示: -

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

3 个答案:

答案 0 :(得分:1)

使用re.sub功能。

>>> s = "assdd ffdsfad 'result_secret_key': 'dfkfaj&^%2', 'auth_matrix': '213fsdf#', 'password': 'adsfa&&*!@#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 :(得分:1)

Avinash Raj的回答可能会更好...... 但这是另一个:

re.sub(": '.*?'",r": '***'",s)

答案 2 :(得分:0)

('[^']*?(?=secret|auth|key|password)[^']*':\s*')[^']*'

试试这个。\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&&*!@#4' and 'app_auth': 'eff#@DS' dafsdsaf adfs adlsfjasdkjf "
subst = u"\1****'"

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