-1

我的想法是在一个句子中找到每封电子邮件并将其替换为不同的随机电子邮件(匿名)。但我无法得到我想要的结果。每封电子邮件都被替换为同一封电子邮件,否则我收到错误消息(列表索引超出范围)

输入:email = "daniel@hotmail.com 发送到 ana@gmail.com"

输出我想要电子邮件 =“albert@hotmail.com 发送到 john@gmail.com”

random_emails = ["albert", "john", "mary"]


def find_email(email: str):
    result = email
    i = 0
    email_address = r"\S+@"
    for text in email:
            result = re.sub(email_address, random_emails[i] + "@", result)
            i += 1
    return result

print(find_email(email))
4

2 回答 2

0

我找到了一个解决方案,但请注意,相同的电子邮件将以相同的方式匿名化。我让你试试这个:

import re

email = "daniel@hotmail.com sent it to ana@gmail.com"
random_emails = ["albert", "john", "mary"]

def find_email(email: str):
    result = email
    i = 0
    email_address = r"\S+@"
    regex_matches = re.findall(email_address, email)
    for match in regex_matches:
        result = result.replace(match, random_emails[i] + "@")
        i += 1
    return result

print(find_email(email))
于 2020-01-18T00:16:05.283 回答
0

你不需要 for 循环,我认为你的 RegExr 可以改进

def find_email(email):
    result = email
    email_address = r"(\w+@)(\w+.* )(\w+@)(\w+.*)"
    a='AAAAA@'
    b='BBBBB@'
    result = re.sub(email_address, rf'{a}\2{b}\4', result)
    return result


email = "daniel@hotmail.com sent it to ana@gmail.com"
print(find_email(email))

解释:

您可以创建替换组:

1º = 1º 电子邮件 2º = 服务器和文本 3º = 2º 电子邮件 4º = server.com

现在,您只需将 \1 和 \2 替换为您想要的everythink

示例 2:您的新例程

import re
from random import seed
from random import randint

random_emails = ["albert", "john", "mary"]


def find_email(email):
    result = email
    email_address = r"(\w+@)(\w+.* )(\w+@)(\w+.*)"
    first = randint(0, 2)
    second = randint(0, 2)
    while first == second:
        second = randint(0, 2)
    result = re.sub(email_address, rf'{random_emails[first]}@\2{random_emails[second]}@\4', result)
    return result


email = "daniel@hotmail.com sent it to ana@gmail.com"
print(find_email(email))

我使用随机生成一个随机数来从列表中获取电子邮件。而“while first == second:”只是为了不重复第一封和第二封电子邮件

于 2020-01-18T01:29:05.990 回答