using System.Text.RegularExpressions;
public static string AnonymiseEmail(string email)
if (string.IsNullOrEmpty(email) || !email.Contains("@") || !email.Contains(".") || email.Contains(" "))
string user = email.Substring(0, email.LastIndexOf("@"));
if (!string.IsNullOrEmpty(user) && user.Length > 3)
string patternUser = @"(?<=[\w\.]{2})[\w\.\@]*(?=[\w\.]{1})";
user = Regex.Replace(user, patternUser, m => new string('*', m.Length));
Console.WriteLine($"user = {user}");
string domain = ExtractDomain(email);
if (!string.IsNullOrEmpty(domain) && domain.Length > 5)
string patternDomain = @"(?<=@[\w\-\._]{2})[\w\-\._]*(?=[\w\-_]{1})";
domain = Regex.Replace(domain, patternDomain, m => new string('*', m.Length));
Console.WriteLine($"domain = {domain}");
bool domainHasExtension = email.LastIndexOf(".") > email.LastIndexOf("@");
string extension = domainHasExtension
? email.Substring(email.LastIndexOf(".") + 1, email.Length - email.LastIndexOf(".") - 1)
Console.WriteLine($"extension = {extension}");
return $"{user}{domain}{extension}";
private static string ExtractDomain(string email)
int lastArobaseIndex = email.LastIndexOf("@");
int lengthOfDomainToken = email.LastIndexOf(".") - lastArobaseIndex + 1;
return lengthOfDomainToken >= 0
? email.Substring(lastArobaseIndex, lengthOfDomainToken)
: email.Substring(lastArobaseIndex);
public static void Main()
var result = AnonymiseEmail("plusieurs@arobase@dans@local.part@domaine_sans_point");
Console.WriteLine($"result = {result}");