Заменить на список l oop - PullRequest
0 голосов
/ 18 января 2020

Моя идея - найти каждое письмо в предложении и заменить его другим случайным письмом (анонимизация). Но я не могу получить желаемый результат. Каждое письмо заменяется тем же, или я получаю сообщение об ошибке (индекс списка выходит за пределы диапазона)

input: email = "daniel@hotmail.com отправил его на ana@gmail.com"

вывод, который я хочу email = "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))

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Вам не нужно для l oop, и я думаю, что ваш 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 на все, что вы хотите

example2 : Ваша новая процедура

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))

Я использовал случайное число, чтобы генерировать случайное число для получения писем из списка. И "пока первый == второй:" только чтобы не повторять первое и второе письма

0 голосов
/ 18 января 2020

Я нашел решение, но учтите, что идентичные электронные письма будут анонимно анонимны. Я позволю вам попробовать это:

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))
...