亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號