Выборочное редактирование ключа переменной длины из URL с использованием Python - PullRequest
0 голосов
/ 29 января 2020

Мне нужно использовать Python, чтобы редактировать ключ переменной длины из строки URL. Все, кроме последних четырех символов ключа, должны быть отредактированы. Последние четыре символа ключа должны быть намеренно оставлены незамеченными для целей идентификации. Набор символов ключа ASCII alphanumeri c. В противном случае URL должен оставаться неизменным. Символ, используемый для редактирования (): unicodedata.lookup("FULL BLOCK").

Пример ввода: https://example.com/data?bar=irish&key=dc3e966e4c57effb0cc7137dec7d39ac.

Пример вывода: https://example.com/data?bar=irish&key=████████████████████████████39ac.

Я использую Python 3,8. Существует другой вопрос, касающийся редактирования пароля в другом месте в URL , и он мне не помогает.

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

1 Ответ

0 голосов
/ 29 января 2020

Гибкий способ сделать это - использовать регулярное выражение 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'
...