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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |