Заменить подстроки в строке с помощью re.sub? - PullRequest
0 голосов
/ 06 августа 2020

Мне нужен совет, чтобы мое регулярное выражение работало должным образом. Это расширенный вопрос к этому вопросу .

Я хочу заменить все пароли и ключи на «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 &" стоит перед ключевым "паролем", который я ищу. Но также возможно, что ключ, который вы ищете, начинается после пробела (например, password = secure).

В конечном итоге это должно выходить из приведенного выше примера.

message = test&password=xxxx password=xxxx and my secret-key=zzzz should not be logged.

1 Ответ

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

Если «перед ключом можно разместить любое количество символов и специальных символов», то я думаю, вам будет лучше явно сопоставить ключи. Например:

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.
...