Мне нужно использовать Python, чтобы редактировать ключ переменной длины из строки URL. Все, кроме последних четырех символов ключа, должны быть отредактированы. Последние четыре символа ключа должны быть намеренно оставлены незамеченными для целей идентификации. Набор символов ключа ASCII alphanumeri c. В противном случае URL должен оставаться неизменным. Символ, используемый для редактирования (█): unicodedata.lookup("FULL BLOCK").
█
unicodedata.lookup("FULL BLOCK")
Пример ввода: https://example.com/data?bar=irish&key=dc3e966e4c57effb0cc7137dec7d39ac.
https://example.com/data?bar=irish&key=dc3e966e4c57effb0cc7137dec7d39ac
Пример вывода: https://example.com/data?bar=irish&key=████████████████████████████39ac.
https://example.com/data?bar=irish&key=████████████████████████████39ac
Я использую Python 3,8. Существует другой вопрос, касающийся редактирования пароля в другом месте в URL , и он мне не помогает.
Я пробовал простую замену регулярных выражений, но она работала только с ключ фиксированной длины, тогда как у меня есть ключ переменной длины.
Гибкий способ сделать это - использовать регулярное выражение substitution с функцией замены. В регулярном выражении используются несоответствующие положительные взгляды и взгляды .
import re import unicodedata _REGEX = re.compile(r"(?<=\Wkey=)(?P<redacted>\w+)(?=\w{4})") _REPL_CHAR = unicodedata.lookup("FULL BLOCK") def redact_key(url: str) -> str: # Ref: https://stackoverflow.com/a/59971629/ return _REGEX.sub(lambda match: len(match.groupdict()["redacted"]) * _REPL_CHAR, url)
Тест:
redact_key('https://example.com/data?bar=irish&key=dc3e966e4c57effb0cc7137dec7d39ac') 'https://example.com/data?bar=irish&key=████████████████████████████39ac' >>> redact_key('https://example.com/data?key=dc3e966e4c57effb0cc7137dec7d39ac') 'https://example.com/data?key=████████████████████████████39ac' >>> redact_key('https://example.com/data?bar=irish&key=dc3e966e4c57effb0cc7137dec7d39ac&baz=qux') 'https://example.com/data?bar=irish&key=████████████████████████████39ac&baz=qux' >>> redact_key('https://example.com/data?bar=irish&baz=qux') 'https://example.com/data?bar=irish&baz=qux'