2009-07-03 5 views
1

Est-ce la meilleure façon de le faire avec Regex? Je ne veux pas qu'il prenne des mots partiels, par exemple si je cherche Gav, il ne devrait pas correspondre à Gavin.C# Vérifier qu'un mot existe dans une chaîne

Tous les exemples seraient excellents car mes compétences d'expression régulière sont inexistantes.

Merci

Répondre

16

Oui, un Regex est parfait pour le travail.

Quelque chose comme:

string regexPattern = string.Format(@"\b{0}\b", Regex.Escape(yourWord)); 
if (Regex.IsMatch(yourString, regexPattern)) { 
    // word found 
} 
+2

+1 pour Regex.Escape() – RichieHindle

+4

Il est également possible d'ajouter RegexOptions.IgnoreCase, selon que l'OP souhaite ou non que la correspondance soit sensible à la casse. – LukeH

3

Ce que vous voulez est probablement comme ceci:

if (Regex.IsMatch(myString, @"\bGav\b")) { ... } 

Le \ b: s dans les regex indiquent les limites des mots, à savoir un espace ou début/fin de la chaîne. Vous pouvez également ajouter RegexOptions.IgnoreCase comme troisième paramètre si vous le souhaitez. Notez que la @ -sign devant la regex est essentielle, sinon elle est mal interprétée en raison du double sens du signe \.

+0

Il ne se fait pas mal interprété, il vous suffit d'écrire le modèle différemment: @ "\ bGav \ b" est égal à "\\ bGav \\ b" – Lucero

+0

Oui, exactement. Cependant, je trouve que la chaîne littérale verbatim (@ "...")) est bien meilleure pour représenter des expressions régulières, car les règles d'échappement de Regex sont assez complexes comme elles le sont; Laisser la syntaxe C# dans le mix rend les choses plus difficiles, surtout si vous voulez coller des choses dans d'autres environnements où les règles d'échappement sont rarement les mêmes. –

Questions connexes