我有一个如下字符串: -
"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 "
答案 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)