30 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|