Это более универсальный способ сделать это.
Regex дает вам больше контроля над контекстом слов, которые он находит.
И, я полагаю, это намного быстрее, так как все это делается водин выстрел
без множества манипуляций примитивами.
string[] words = { "word1", "word2", "word3" };
Regex rx = new Regex( @"(?is)(?:.*?\b(" + string.Join("|", words) + @")\b)+");
string strin = "There are some word3 and more words and word1 and more word3, again word1";
Match m = rx.Match( strin );
if ( m.Success )
Console.WriteLine("Found {0} words", m.Groups[1].Captures.Count);
Вывод
Found 4 words
В приведенном выше регулярном выражении используется граница слова \b
.
Альтернативный выбор границы: пробел (?<!\S) (?!\S)