Вы должны попробовать что-то вроде этого, используя MatchEvaluator
return Regex.Replace(input,
@"\S+",
(match) =>
{
var word = match.Value;
var formatException = yourListOfTitleCaseExceptions.FirstOrDefault(e => e.Trim().Equals(word, StringComparison.InvariantCultureIgnoreCase));
if (formatException == null)
{
Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(word.ToLower())
}
return formatException.Trim();
});
Это разделит слова на части, проверит список исключений, которые вы сделали, и проигнорирует их в названии. Если слово не найдено, оно получит заглавные буквы, как и ожидалось. Если исключение найдено, слово без изменений будет возвращено.