è possibile utilizzare una semplice query LINQ, se tutto ciò che serve è quello di verificare la presenza di sottostringhe:
var q = words.Any(w => myText.Contains(w));
// returns true if myText == "This password1 is weak";
Se si desidera verificare la presenza di parole intere, si può usare un'espressione regolare:
corrispondenza con un'espressione regolare che è la disgiunzione di tutte le parole:
// 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);
suddivisione della stringa in parole con un'espressione regolare, e test per l'adesione sulla raccolta parole (questo sarà più veloce se si utilizza fare le parole in un HashSet
invece di un List
):
var pattern = new Regex(@"\W");
var q = pattern.Split(myText).Any(w => words.Contains(w));
per filtrare una raccolta di frasi secondo questo criterio tutto ciò che dovete fare il suo metterlo in una funzione e chiamare Where
:
// Given:
// bool HasThoseWords(string sentence) { blah }
var q = sentences.Where(HasThoseWords);
o metterlo in un lambda:
var q = sentences.Where(s => Regex.Split(myText, @"\W").Any(w => words.Contains(w)));
Ans Da =>How to check if any word in my List<string> contains in text da @R. Martinho Fernandes
fonte
2013-07-12 09:22:35
Brillante! Ha funzionato. La sintassi VB è: search.Any (Funzione (n) p.Description.ToLower.Contains (n)) –
Quando provo a farlo, ottengo "Impossibile creare un valore costante di tipo 'Tipo chiusura'. i tipi primitivi ('come Int32, String e Guid') sono supportati in questo contesto. " la mia "ricerca" è una lista e la mia "descrizione" è anche una stringa. –