Вы можете использовать простой запрос LINQ, если все, что вам нужно, это проверить подстроки:
var q = words.Any(w => myText.Contains(w));
// returns true if myText == "This password1 is weak";
Если вы хотите проверить целые слова, вы можете использовать регулярное выражение:
Соответствие регулярному выражению, которое является дизъюнкцией всех слов:
// you may need to call ToArray if you're not on .NET 4
var escapedWords = words.Select(w => @"\b" + Regex.Escape(w) + @"\b");
// the following line builds a regex similar to: (word1)|(word2)|(word3)
var pattern = new Regex("(" + string.Join(")|(", escapedWords) + ")");
var q = pattern.IsMatch(myText);
Разделение строки на слова с регулярным выражением и проверка на членство в коллекции слов (это будет быстрее, если вы используете make слов в HashSet
вместо List
):
var pattern = new Regex(@"\W");
var q = pattern.Split(myText).Any(w => words.Contains(w));
Чтобы отфильтровать набор предложений по этому критерию, все, что вам нужно сделать, поместить его в функцию и вызвать Where
:
// Given:
// bool HasThoseWords(string sentence) { blah }
var q = sentences.Where(HasThoseWords);
Или положить в лямбду:
var q = sentences.Where(s => Regex.Split(myText, @"\W").Any(w => words.Contains(w)));
Ответ от => Как проверить, содержится ли какое-либо слово в моем списке в тексте от @R. Мартиньо Фернандес