在键值列表正则表达式

时间:2017-09-11 12:28:00

标签: python regex passwords mask

我有一个键值对列表:

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 个答案:

答案 0 :(得分:0)

您可以扩展模式以匹配任何未跟随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=*****,