Учитывая словарь, как и в других ответах, вы можете использовать «агрегат» для сопоставления каждого шаблона в словаре с заменой.Это даст вам гораздо большую гибкость, чем другие ответы, так как вы можете иметь различные параметры регулярных выражений для каждого шаблона.
Например, следующий код будет «романизировать» греческий текст (https://en.wikipedia.org/w/index.php?title=Romanization_of_Greek§ion=3#Modern_Greek, Standard /UN):
var map = new Dictionary<string,string>() {
{"α[ύυ](?=[άαβγδέεζήηίΐϊιλμνόορύΰϋυώω])", "av"}, {"α[ύυ]", "af"}, {"α[ϊΐ]", "aï"}, {"α[ιί]", "ai"}, {"[άα]", "a"},
{"β", "v"}, {"γ(?=[γξχ])", "n"}, {"γ", "g"}, {"δ", "d"},
{"ε[υύ](?=[άαβγδέεζήηίΐϊιλμνόορύΰϋυώω])", "ev"}, {"ε[υύ]", "ef"}, {"ει", "ei"}, {"[εέ]", "e"}, {"ζ", "z"},
{"η[υύ](?=[άαβγδέεζήηίΐϊιλμνόορύΰϋυώω])", "iv"}, {"η[υύ]", "if"}, {"[ηήιί]", "i"}, {"[ϊΐ]", "ï"},
{"θ", "th"}, {"κ", "k"}, {"λ", "l"}, {"\\bμπ|μπ\\b", "b"}, {"μπ", "mb"}, {"μ", "m"}, {"ν", "n"},
{"ο[ιί]", "oi"}, {"ο[υύ]", "ou"}, {"[οόωώ]", "o"}, {"ξ", "x"}, {"π", "p"}, {"ρ", "r"},
{"[σς]", "s"}, {"τ", "t"}, {"[υύϋΰ]", "y"}, {"φ", "f"}, {"χ", "ch"}, {"ψ", "ps"}
};
var input = "Ο Καλύμνιος σφουγγαράς ψυθίρισε πως θα βουτήξει χωρίς να διστάζει.";
map.Aggregate(input, (i, m) => Regex.Replace(i, m.Key, m.Value, RegexOptions.IgnoreCase));
возврат (без изменения переменной "input":
"o kalymnios sfoungaras psythirise pos tha voutixei choris na distazei."
Конечно, вы можете использовать что-то вроде:
foreach (var m in map) input = Regex.Replace(input, m.Key, m.Value, RegexOptions.IgnoreCase);
, что делаетизмените переменную «input».
Также вы можете добавить это, чтобы улучшить производительность:
var remap = new Dictionary<Regex, string>();
foreach (var m in map) remap.Add(new Regex(m.Key, RegexOptions.IgnoreCase | RegexOptions.Compiled), m.Value);
кешировать или сделать статический словарь переназначения и затем использовать:
remap.Aggregate(input, (i, m) => m.Key.Replace(i, m.Value));