Маскировать несколько конфиденциальных данных с помощью re.sub? - PullRequest
0 голосов
/ 05 августа 2020

Я хочу замаскировать несколько значений в строке. Этот вызов работает для одного значения, как и ожидалось.

message = "my password=secure and my private_key=securekey should not be logged."
message = re.sub(r"(?is)password=.+", "password=xxxx", str(message))

Как должно выглядеть регулярное выражение, чтобы я мог замаскировать несколько значений из словаря?

d = {"password": "xxxx", "private_key": "zzzz"}
message = re.sub(r"(?is)\w=.+", lambda m: d.get(m.group(), m.group()), message)

Это также возможно ли заменить значения другими значениями в том же вызове регулярного выражения?

message = re.sub(r"data_to_mask", "xzxzxzx", str(message))

1 Ответ

0 голосов
/ 05 августа 2020

можно было сделать:

message = "my password=secure and my private_key=securekey should not be logged."

import re
d = {"password": "xxxx", "private_key": "zzzz"}

def replace(x):
    key = x.group(1)
    val = d.get(key, x.group(2))
    return f"{key}={val}"

re.sub(r"\b(\w+)=(\w+)", replace, message)
my password=xxxx and my private_key=zzzz should not be logged.
...