using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class Program
{
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 exclusionGroup = string.Join("|", exclude.Select(p => string.Concat(p.Key, string.Join(string.Empty, p.Value))));
string leaveOnly = String.Concat(String.Format(@"({0})|\p{{M}}+", exclusionGroup));
return Regex.Replace(source, leaveOnly, "$1");
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKCQkJCQkKcHVibGljIGNsYXNzIFByb2dyYW0KewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXN0cmluZyBzb3VyY2UgPSAi15fWuNeW1rTXmdeq1rTXmSDXm9a81rDXnta015HWvNa316LWt9eTINec1rbXota416nXgda4158g15HWvNaw16fWtNee1rzXlda816jWtdeZINeU1rjXqNa216HWttehINeU1rfXnNa81rjXkda4158iOwoJCURpY3Rpb25hcnk8Y2hhciwgY2hhcltdPiBleGNsdWRlID0gbmV3IERpY3Rpb25hcnk8Y2hhciwgY2hhcltdPgoJCXsKCQkJeydcdTA1ZGInLCBuZXcgY2hhcltdIHsnXHUwNWJjJyB9IH0sIC8vINeb1rwKCQkJeydcdTA1ZDEnLCBuZXcgY2hhcltdIHsnXHUwNWJjJywgJ1x1MDViNycgfSB9LCAvLyDXkda81rcKCQl9OwoJCXN0cmluZyByZXBsYWNlZCA9IFJlbW92ZURpYWNyaXRpY3MoZXhjbHVkZSwgc291cmNlKTsKCQlDb25zb2xlLldyaXRlTGluZShyZXBsYWNlZCk7Cgl9CglwdWJsaWMgc3RhdGljIHN0cmluZyBSZW1vdmVEaWFjcml0aWNzKERpY3Rpb25hcnk8Y2hhciwgY2hhcltdPiBleGNsdWRlLCBzdHJpbmcgc291cmNlKQoJewoJCXN0cmluZyBleGNsdXNpb25Hcm91cCA9IHN0cmluZy5Kb2luKCJ8IiwgZXhjbHVkZS5TZWxlY3QocCA9PiBzdHJpbmcuQ29uY2F0KHAuS2V5LCBzdHJpbmcuSm9pbihzdHJpbmcuRW1wdHksIHAuVmFsdWUpKSkpOwoJCXN0cmluZyBsZWF2ZU9ubHkgPSBTdHJpbmcuQ29uY2F0KFN0cmluZy5Gb3JtYXQoQCIoezB9KXxccHt7TX19KyIsIGV4Y2x1c2lvbkdyb3VwKSk7CgkJcmV0dXJuIFJlZ2V4LlJlcGxhY2Uoc291cmNlLCBsZWF2ZU9ubHksICIkMSIpOwoJfQp9