This repository has been archived on 2022-08-31. You can view files and clone it, but cannot push or open issues or pull requests.
awesome-email-extractor/ExtactEmailsAlgorithm.cs

30 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace AwesomeEmailExtractor
{
internal class ExtactEmailsAlgorithm
{
public static int Extract(string inputText, out List<string> uniqueEmails)
{
// Регулярное выражение для поиска почтовых адресов
string pattern = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
// Находим каждый почтовый адрес в тексте
var matches = Regex.Matches(inputText, pattern, RegexOptions.IgnoreCase);
// Получаем количество найденных адресов
int countMatches = matches.Count;
// Получаем уникальные почтовые адреса
uniqueEmails = matches.Cast<Match>().Select(m => m.Value).Distinct().ToList();
return countMatches;
}
}
}