Просто догадываюсь . Насколько я вижу, у нас есть следующий формат:
&
Letter(s) - transliterated letter
cy - stands for Cyrillic
;
Мы можем сопоставить все буквы с помощью Регулярные выражения и Concat
их в string
например
using System.Text.RegularExpressions;
...
string body = "Корпус";
var transliteratedText = Regex.Replace(
body,
@"&(?<letter>[A-Za-z]+)cy;",
m => m.Groups["letter"].Value);
Console.Write(transliteratedText);
И у нас будет
Korpus
, что звучит разумно, поскольку оно транслитерировано Русское слово Корпус (Corpus
, Body
, Bulk
, Carcass
). Существует несколько стандартов транслитерации (я пробовал Библиотека Конгресса схема, которая является лишь одной из самых популярных); Чтобы определить правильный стандарт (или создать наш собственный), мы хотим больше данных.
Редактировать Например, если у нас есть схема, скажем,
private static Dictionary<string, string> translit =
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
{"a", "а"},
{"b", "б"},
{"v", "в"},
{"g", "г"},
{"d", "д"},
{"ie", "е"},
//{"", "ё"}, //TODO: define the letter transliteration
{"zh", "ж"},
{"z", "з"},
{"i", "и"},
{"j", "й"},
{"k", "к"},
{"l", "л"},
{"m", "м"},
{"n", "н"},
{"o", "о"},
{"p", "п"},
{"r", "р"},
{"s", "с"},
{"t", "т"},
{"u", "у"},
{"f", "ф"},
{"h", "х"},
{"ts", "ц"},
{"ch", "ч"},
{"sh", "ш"},
{"shch", "щ"},
//{"", "ъ"}, //TODO: define the letter transliteration
{"y", "ы"},
//{"", "ь"}, //TODO: define the letter transliteration
//{"", "э"}, //TODO: define the letter transliteration
//{"", "ю"}, //TODO: define the letter transliteration
{"ya", "я"},
};
, мы можем транслитерировать каждую букву:
private static string MyDecoding(string value) {
return Regex
.Replace(value, @"&(?<letter>[A-Za-z]+)cy;", m => {
string v = m.Groups["letter"].Value;
return char.IsUpper(v[0])
? CultureInfo.InvariantCulture.TextInfo.ToTitleCase(translit[v])
: translit[v];
}
);
}
...
Console.Write(MyDecoding("Корпус"));
Итог:
Корпус