我有一个键值对列表:
gkketl1Pwd=SDFDSFSFD_213213#asdsad,tech1User=WQEWQQW,techPwd=sdfdsfdM9S,gkkhistPwd=FDSFDDF_WISD01#sad,render1Pwd="SADcyx12321321,213213,recoveryPwd=asdsaSA"ycNJ,9CB9PAJ2w4AbqBHB!,trustStorePwd=test,
我想记录该字符串,但不想打印密码。我不想注销密码,而是想先屏蔽它们。
我正在使用 Python,目前使用以下表达式来屏蔽密码:
maskedValue=re.sub("([\\w]*Pwd=)(.[^,]*)", lambda m: "%s*****" % m.group(1), args[1])
不幸的是,如果密码包含逗号,则代码无法完全运行。那么有谁知道如何完全屏蔽包含逗号的密码。
最佳答案
您可以扩展该模式以匹配任何后面没有 1 个以上单词字符的 ,
,然后是 =
或字符串结尾:
(\w*Pwd=)([^,]*(?:,(?!\w+=|$)[^,]*)*)
^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo
详细信息
(\w*Pwd=)
- 第 1 组:零个或多个单词字符,后跟Pwd
子字符串 和等号([^,]*(?:,(?!\w+=)[^,]*)*)
- 第 2 组匹配[^,]*
- 除,
字符之外的任何 0+ 个字符(?:,(?!\w+=|$)[^,]*)*
- 零次或多次后续出现:,(?!\w+=|$)
- 后面没有 1 个或多个单词字符且后跟=
的,
符号或字符串结尾[^,]*
- 除,
字符之外的任何 0+ 个字符
请参阅Python demo :
import re
s = 'gkketl1Pwd=SDFDSFSFD_213213#asdsad,tech1User=WQEWQQW,techPwd=sdfdsfdM9S,gkkhistPwd=FDSFDDF_WISD01#sad,render1Pwd="SADcyx12321321,213213,recoveryPwd=asdsaSA"ycNJ,9CB9PAJ2w4AbqBHB!,trustStorePwd=test,'
maskedValue=re.sub(r"(\w*Pwd=)([^,]*(?:,(?!\w+=|$)[^,]*)*)", lambda m: "{}*****".format(m.group(1)), s)
print(maskedValue)
# => gkketl1Pwd=*****,tech1User=WQEWQQW,techPwd=*****,gkkhistPwd=*****,render1Pwd=*****,recoveryPwd=*****,trustStorePwd=*****,
关于python - 在键值列表正则表达式中屏蔽密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46155804/