为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

大话西游666 2022-07-12 10:04:42
我需要使用 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 中的不同位置编辑密码,它对我没有帮助。我尝试了一个简单的正则表达式替换,但它只适用于固定长度的密钥,而我有一个可变长度的密钥。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

一种灵活的方法是使用带有替换函数的正则表达式替换。正则表达式使用不匹配的正向后向和前向断言。


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'


查看完整回答
反对 回复 2022-07-12
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信