猿问

使用 Python 从 URL 中选择性地编辑可变长度密钥

我需要使用 Python 从 URL 字符串中编辑可变长度键。除了密钥的最后四个字符之外的所有字符都将被编辑。出于识别目的,密钥的最后四个字符有意保持未编辑。密钥的字符集是 ASCII 字母数字。该 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 中的不同位置编辑密码,它对我没有帮助。

我尝试了一个简单的正则表达式替换,但它只适用于固定长度的密钥,而我有一个可变长度的密钥。


大话西游666
浏览 91回答 1
1回答

qq_笑_17

一种灵活的方法是使用带有替换函数的正则表达式替换。正则表达式使用不匹配的正向后向和前向断言。import reimport unicodedata_REGEX = re.compile(r"(?<=\Wkey=)(?P<redacted>\w+)(?=\w{4})")_REPL_CHAR = unicodedata.lookup("FULL BLOCK")def redact_key(url: str) -> str:&nbsp; &nbsp; # Ref: https://stackoverflow.com/a/59971629/&nbsp; &nbsp; 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'
随时随地看视频慕课网APP

相关分类

Python
我要回答