Dans C#
, Je veux utiliser une expression régulière pour faire correspondre l'un de ces mots:
string keywords = "(shoes|shirt|pants)";
Je veux trouver les mots entiers dans la chaîne de contenu. Je pensais que ce regex
ferait ça:
if (Regex.Match(content, keywords + "\\s+",
RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
//matched
}
mais il renvoie vrai pour des mots comme participants
, même si je ne veux que le mot entier pants
.
Comment faire correspondre uniquement ces mots littéraux?
Vous devez ajouter le délimiteur Word à votre expression régulière:
\b(shoes|shirt|pants)\b
Dans du code:
Regex.Match(content, @"\b(shoes|shirt|pants)\b");
Essayer
Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)
\b
correspond aux limites de Word. Voir ici pour plus de détails.
Vous avez besoin d'une affirmation de largeur nulle de chaque côté que les caractères avant ou après le mot ne font pas partie du mot:
(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))
Comme d'autres l'ont suggéré, je pense \ b fonctionnera au lieu de (? = (\ W | ^) ) et (?! (\ W | $)) même lorsque le mot se trouve au début ou à la fin de la chaîne d'entrée, mais je ne suis pas sûr.
mettre une limite Word dessus en utilisant la métaséquence\b.