В зависимости от того, как часто вы планируете делать заглавные буквы, я бы использовал наивный подход. Возможно, вы могли бы сделать это с помощью регулярного выражения, но тот факт, что вам не нужны определенные слова с заглавными буквами, делает это немного хитрее.
Редактировать:
Вы можете сделать это за два прохода, используя регулярные выражения
var result = Regex.Replace("of mice and men isn't By CNN", @"\b(\w)", m => m.Value.ToUpper());
result = Regex.Replace(result, @"(\s(of|in|by|and)|\'[st])\b", m => m.Value.ToLower(), RegexOptions.IgnoreCase);
Это выводит Of Mice and Men Isn't by CNN
.
В первом выражении каждая буква на границе слова пишется с заглавной буквы, а во втором - все слова, соответствующие списку, которые окружены пробелами.
Недостатки этого подхода в том, что вы используете регулярные выражения (теперь у вас есть две проблемы), и вам нужно будет постоянно обновлять этот список исключенных слов. Мое регулярное выражение недостаточно хорошо, чтобы сделать это одним выражением, но это возможно.