# Created on savesnippets.com ยท https://savesnippets.com/KALFq5qxwldKdw def mask_middle(s: str, keep_start: int = 4, keep_end: int = 4, mask: str = "*") -> str: if len(s) <= keep_start + keep_end: return mask * len(s) return s[:keep_start] + mask * (len(s) - keep_start - keep_end) + s[-keep_end:] def mask_email(email: str) -> str: user, sep, domain = email.partition("@") if not sep: return mask_middle(email) masked = user[0] + "*" * max(1, len(user) - 2) + user[-1] if len(user) > 2 else "*" * len(user) return f"{masked}@{domain}" mask_middle("4242424242424242") # '4242********4242' mask_email("alice@example.com") # 'a***e@example.com' mask_middle("sk_live_AbC1234", 8, 0) # 'sk_live_********'