python - 在键值列表正则表达式中屏蔽密码

标签 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 个以上单词字符的 ,,然后是 = 或字符串结尾:

(\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/

相关文章:

forms - 如何在Shopify中制作确认密码字段?

python - Boost Python用默认参数包装静态成员函数重载

python正则表达式基础

javascript - 数字和小数的输入掩码

javascript - 如何验证此格式的日期 (dd\mm\yyyy)

php - password_hash 似乎返回一个随机变量

passwords - 生成重置密码 token 的最佳实践

python - 按列迭代 3D 列表

python - Tensorflow 中的加权 Mape

python - Web2py SQLFORM.grid 与 executesql