题目描述

邮箱地址,作为重要的个人隐私数据,需要按照一定的匿名化规则处理后才能安全离网。邮箱地址的基本格式为“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))

results matching ""

    No results matching ""