题目描述
邮箱地址,作为重要的个人隐私数据,需要按照一定的匿名化规则处理后才能安全离网。邮箱地址的基本格式为“xxx@yyy.”。注:.后面不需要有其它字符来构成邮箱地址。
由于华为IMS限制,邮箱地址总长度不会超过124个字符,@前字符串可以是英文字母、数字和特殊符号(支持&=+$,;?/-_.!~*'()#),@后字符.的前面部分是域名(含字母、数字和-)。
邮箱地址的匿名化规则为:发现@和.之间有119个及之内字符,而且@前有至少3位字母、数字或上述特殊符号时,匿名化@前倒数3位为*;如果@前少于3位,则不实施匿名化。对于参与了一次匿名化的字符串,不再参与后面的匿名化。
参考如下示例:
匿名化前 匿名化后 说明
a1A@hu23-awei.com ***@hu23-awei.com 识别出:
邮箱地址为a1A@hu23-awei.
符合匿名化条件
~*'@huawei.com ***@huawei.com 识别出:
邮箱地址为~*'@huawei.
符合匿名化条件
12@huawei.com 12@huawei.com 识别出:
邮箱地址为12@huawei.
不符合匿名化条件
123@hu.12@we.i.com ***@hu.12@we.i.com 识别出2个邮箱地址,
第一个地址为123@hu.
第二个地址为12@we.
第一个邮箱地址符合匿名化条件,
由于hu.参与了第一个邮箱地址的匿名化,则不参与到第二个邮箱地址的匿名化,则第二个邮箱地址不符合。
123@hu.123@we.i.com ***@hu.***@we.i.com 识别出2个邮箱地址,
第一个地址为123@hu.
第二个地址为123@we.
第一个邮箱地址符合匿名化条件,
第二个邮箱地址也符合。
A~*'@huawei.com A***@huawei.com 识别出:
邮箱地址为A~*'@huawei.
12@hu.12@we.i.com 12@hu***@we.i.com 符合匿名化条件 字符串12@在@字符前长度小于3,不进行匿名化。则hu.12可以参与后面识别出的邮箱地址的匿名化。
输入描述:
输入待匿名化的字符串,此字符串可能包含非邮箱地址之外的字符,我们需要将邮箱地址部分做匿名化。
输入约束:输入的字符串为ASCII编码,且长度不超过2048个字符;输出描述:
输出匿名化后的字符串。
示例1
输入
a1A@hu23-awei.com
输出
***@hu23-awei.com
import sys
def validate(s, i):
for si in s[i - 3:i]:
if si not in "&=+$,;?/-_.!~*'()#" and not str(si).isalnum():
return False
return True
def validate1(s, i, j):
for si in s[i + 1:j]:
if si is not "-" and not str(si).isalnum():
return False
return True
def anonymity(s):
s = list(s)
a_list = []
dot_index = -1
i = 0
while (i < len(s)):
while (i < len(s)):
if s[i] == '@':
if i - dot_index > 3 and validate(s, i):
a_list.append(i)
i += 1
break
i += 1
while (i < len(s)):
if s[i] == '.' and validate1(s, a_list[-1], i):
dot_index = i
i += 1
break
i += 1
a_list = a_list[:-1] if dot_index == -1 or dot_index < a_list[-1] else a_list
for a in a_list:
s[a - 3:a] = '*' * 3
return ''.join(s)
s = sys.stdin.readline().strip()
print(anonymity(s))