2011-08-22 6 views
0

Donc maintenant j'utilise cette méthode simple pour vérifier une chaîne pour une autre chaîne:recherche une chaîne pour une autre chaîne qui contient un caractère spécial

System.Text.RegularExpressions.Regex.IsMatch(toSearch, toVerifyisPresent, System.Text.RegularExpressions.RegexOptions.IgnoreCase) 

Maintenant, il fonctionne très bien pour la plupart. Mais mon plus gros problème est que si j'essaie de chercher quelque chose comme "areyou + present", si "areyou + present" est là, il reviendra toujours faux. Je pense à cause du "+" dans la chaîne.

Que puis-je faire pour contourner ce problème?

+11

Quel est le problème avec 'string.Contains'? – Oded

+0

À quoi ressemble votre regex? –

Répondre

2

Basé sur le commentaire ci-dessus par Oded.

toSearch.toLowerCase().Contains(toVerifyIsPresent.toLowerCase()) 

Conversion à la fois en minuscules fournira les mêmes fonctionnalités que l'utilisation IgnoreCase

+0

Mieux encore: 'toSearch.IndexOf (toVerifyIsPresent, StringComparison.OrdinalIgnoreCase) == -1' – Serguei

3

Vous pouvez échapper des caractères spéciaux en utilisant un \. Mais comme Oded indique si vous vérifiez juste pour voir si une chaîne contient quelque chose, il vaut mieux utiliser la méthode String.Contains.

Caractères spéciaux dans regex:

http://www.regular-expressions.info/characters.html

méthode String.Contains:

http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

+1

Aussi si vous utilisez '\' pour échapper le '+' n'oubliez pas d'échapper le '\' avec un autre '\' - en d'autres termes '" areyou \\ + present "' devrait le faire ou '@" areyou \ + présent "'. – Serguei

+0

@Serguei, bon point. –

1

Dans les expressions régulières + correspond au groupe précédent une ou plusieurs fois de sorte que le regex areyou+present matches:

areyoupresent 
areyouupresent 
areyouuuuuuuuuuuuuuuuuuuuuuuuuuupresent 

etc ...

1

Demo dans IronPython:

>>> from System.Text.RegularExpressions import * 
>>> Regex.IsMatch("This is a sentence containing 'areyou+present'", "areyou+present"); 
False 
>>> Regex.IsMatch("This is a sentence containing 'areyou+present'", "areyou\\+present"); 
True 
>>> Regex.IsMatch("This is a sentence containing 'areyou+present'", "areyou[+]present"); 
True 
>>> Regex.IsMatch("This is a sentence containing 'areyou+present'", Regex.Escape("areyou+present")); 
True 
Questions connexes