Regex.Match parole intere

In C# , voglio usare un’espressione regolare per abbinare qualsiasi di queste parole:

 string keywords = "(shoes|shirt|pants)"; 

Voglio trovare tutte le parole nella stringa di contenuto. Pensavo che questo regex avrebbe fatto questo:

 if (Regex.Match(content, keywords + "\\s+", RegexOptions.Singleline | RegexOptions.IgnoreCase).Success) { //matched } 

ma ritorna vero per parole come i participants , anche se voglio solo l’intera parola pants .

Come abbinare solo quelle parole letterali?

Dovresti aggiungere la parola delimitatore alla tua espressione regolare:

 \b(shoes|shirt|pants)\b 

Nel codice:

 Regex.Match(content, @"\b(shoes|shirt|pants)\b"); 

Provare

 Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase) 

\b corrisponde ai confini delle parole. Vedi qui per maggiori dettagli.

Hai bisogno di un’asserzione di larghezza zero su entrambi i lati che i caratteri prima o dopo la parola non facciano parte della parola:

 (?=(\W|^))(shoes|shirt|pants)(?!(\W|$)) 

Come altri hanno suggerito, penso che b funzionerà invece di (? = (\ W | ^)) e (?! (\ W | $)) anche quando la parola è all’inizio o alla fine della stringa di input, ma io non sono sicuro

metti un limite di parole su di esso usando la metasequence.