using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
public static void Main()
var input = "HellÒ Wörld ÍÊÒÚÀöß";
var sw = new System.Diagnostics.Stopwatch();
var output1 =ReplaceSpecialCharacters(input, string.Empty);
Console.WriteLine("SW:"+sw.Elapsed);
Console.WriteLine(input);
var chars = input.Select(d => d).Distinct();
foreach(var bla in chars)
input = input.Replace(bla, GetBase(bla));
Console.WriteLine("SW:"+sw.Elapsed);
Console.WriteLine(input);
Console.WriteLine(output1);
public static char GetBase(char input)
if (ignore.Contains(input))
var result = input.ToString().Normalize(NormalizationForm.FormD);
private const string regexStr = @"[^a-zA-Z0-9äöüÄÖÜß'\- _.]+";
public static string ReplaceSpecialCharacters(string str, string replaceCharacter)
if (string.IsNullOrWhiteSpace(str))
return Regex.Replace(Regex.Replace(str, regexStr, NormalizedReplace, RegexOptions.Compiled), regexStr, replaceCharacter, RegexOptions.Compiled);
private static string NormalizedReplace(Match match)
var erg = RemoveAccents(match.Value);
private static string RemoveAccents(string input)
.Normalize(System.Text.NormalizationForm.FormD)
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)