python-3.x - 使用 re.sub 替换字符串中的子字符串?
问题描述
我需要一些建议才能让我的正则表达式按预期工作。这是对这个问题的扩展问题。
我想用“xxxx”和“zzzz”替换所有密码和密钥。
import re
d = {"password": "xxxx", "secret-key": "zzzz"}
def replace(x):
key = x.group(1)
val = d.get(key, x.group(2))
return f"{key}={val}"
message = "test&password=secure password=secure and my secret-key=securekey should not be logged."
re.sub(r"(?<=???)(\S+)=(\S+)", replace, message)
键前面可以放置任意数量的字符和特殊字符。在上面的示例中,“test&”位于我要查找的关键“密码”前面。但也有可能您要查找的密钥在空格之后开始(例如密码=安全)。
最后,这应该来自上面的示例。
message = test&password=xxxx password=xxxx and my secret-key=zzzz should not be logged.
解决方案
如果“可以在键前面放置任意数量的字符和特殊字符”,那么我认为您最好明确匹配您的键。例如:
import re
d = {"password": "xxxx", "secret-key": "zzzz"}
message = "test&password=secure password=secure and my secret-key=securekey should not be logged."
for k, mask in d.items():
message = re.sub(f'(?<={k}=)(\\S+)', mask, message)
print(message)
这将输出:
test&password=xxxx password=xxxx and my secret-key=zzzz should not be logged.
推荐阅读
- html - 为什么outline-color:inherit/inherit在速记属性outline:inherit dotted 2px中不起作用?
- java - Payara自动部署ejb错误但不是手动
- hibernate - 如何修复 Hibernate 5 中的“未知实体”错误?
- javascript - 这个 find 方法的错误在哪里?
- javascript - 缺少反应钩子依赖
- sql - 固定天数的 Redshift SQL SUM
- python - 小于或等于 x 的素数个数
- node.js - 如何从 Node js 中的授权标头中提取凭据
- google-api-php-client - 在 Google 购物内容产品中设置可选字段
- django - Django,不可迭代对象的总价