Здесь решение на основе регулярных выражений
string regWords = "I felt happy because I saw the others were happy and because I knew I should feel happy, but I wasn’t really happy.";
var regMatches = Regex.Matches(regWords, "\\b(?<word>[^\\s]+?)\\b");
var regCommonWords = regMatches.GroupBy(x => x.Groups["word"].Value).OrderByDescending(x => x.Count()).Take(5).Select(x => x.Key);
foreach (var x in regCommonWords)
Console.WriteLine("Value: " + x);
Чтобы получить объяснение, что такое регулярное выражение, посмотрите на это:
https://regex101.com/r/OTBN5V/1
Трудно имейте в виду, что это решение медленнее, чем решение без регулярных выражений, за счет разделения строки.
https://dotnetfiddle.net/E4GDrj
Используемый ответ vinothvs для сравнения скорости
Предупреждение:
Мое решение не рассматривает «не» как слово, а вместо этого видит «wasn» и «t» как отдельные слова, не удалось найти удовлетворительный способ решить эту проблему.