using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
string source = "חָזִיתִי כְּמִבַּעַד לֶעָשָׁן בְּקִמּוּרֵי הָרֶסֶס הַלָּבָן";
Dictionary<char, char[]> exclude = new Dictionary<char, char[]>
{'\u05db', new char[] {'\u05bc' } },
{'\u05d1', new char[] {'\u05bc', '\u05b7' } },
string replaced = RemoveDiacritics(exclude, source);
Console.WriteLine(replaced);
public static string RemoveDiacritics(Dictionary<char, char[]> exclude, string source)
string match = "(?<=[א-ת])[\u05b0-\u05c2]";
string exclusionGroup = string.Join("|", exclude.Select(p => string.Concat(p.Key, string.Join(string.Empty, p.Value))));
string except = String.Format("(?!{0})", exclusionGroup);
string combined = string.Concat(except, match);
return Regex.Replace(source, combined, string.Empty);