Recherche occurence dans une chaîne

Recherche occurence dans une chaîne - C#/.NET managed - Programmation

Marsh Posté le 23-02-2012 à 11:50:07    

Bonjour,
 
Dans un fichier je recherche l'occurrence suivante [HKEY_LOCAL_MACHINE\SOFTWARE\SOL\hexawin8]
 

Code :
  1. string sPattern = "HKEY_LOCAL_MACHINE\\SOFTWARE\\SOL\\hexawin8";
  2. if (System.Text.RegularExpressions.Regex.IsMatch(line, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
  3. {
  4.      ......
  5. }


et cela me lève une exception :  
 
parsing "HKEY_LOCAL_MACHINE\SOFTWARE\SOL\hexawin8" - Unrecognized escape sequence \h.
 
 
Apparemment il croit que \h de \hexawin8 est un caractère d'échappement. Mais comment contrer ce phénomène ?
 
Avez-vous une idée ?
 
D'avance merci

Reply

Marsh Posté le 23-02-2012 à 11:50:07   

Reply

Marsh Posté le 23-02-2012 à 12:23:12    

C'est un peu normal, mais si ton problème est exactement celui que tu présente, tu te compliques pas mal la tâche, non ?
Je vois pas bien l'utilité d'une expression régulière pour rechercher une chaîne connue.
 
Un simple
 

Code :
  1. var pattern= @"HKEY_LOCAL_MACHINE\SOFTWARE\SOL\hexawin8";
  2. if line.Contains(pattern)
  3. {
  4.     ...
  5. }


 
Edith me dit, si je ne m'abuse que pour rechercher un backslash dans une expression régulière, tu dois le quadrupler
 
Donc si tu tiens absolument à une expression régulière :

Code :
  1. string sPattern = "HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\SOL\\\\hexawin8";
  2.     // ou plus lisible, un verbatim string, comme je l'ai fait dans l'exemple plus haut, avec un petit @ qui te permet d'éviter un doublement de caractère d'échappement
  3.    sPattern=@"HKEY_LOCAL_MACHINE\\SOFTWARE\\SOL\\hexawin8";
  4.     if (System.Text.RegularExpressions.Regex.IsMatch(line, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
  5.     {
  6.          ......
  7.     }


 
ou encore


Message édité par deliriumtremens le 23-02-2012 à 12:29:34
Reply

Marsh Posté le 23-02-2012 à 13:46:53    

merci pour ton aide
 
effectivement avec le quadruple antislash ça fonctionne.
 
La solution n°1 me parait bien plus simple en effet, mais le compilateur ne reconnais pas "var"

Reply

Marsh Posté le 23-02-2012 à 14:19:58    

bah met string alors... mais ça semble bizarre qu'il ne reconnaisse pas var :heink:


---------------
http://forum.hardware.fr/hfr/Achat [...] 0043_1.htm
Reply

Marsh Posté le 23-02-2012 à 14:33:51    

J'ai tappé ça :
string sPattern = @"\[HKEY_LOCAL_MACHINE\\SOFTWARE\\SOL\\hexawin8\]";
 
et ça fonctionne. Parcontre pour var est-ce qu'il ne faudrait pas rajouter un using en début de programme ?
 
J'utilise Visual C# Studio 2010 Express

Reply

Marsh Posté le 23-02-2012 à 15:00:02    

bof dans l'absolu c'est pas grave, et quoi qu'en dise Micromou, les var c'est le mal :O


Message édité par snipeangel le 23-02-2012 à 17:13:16

---------------
http://forum.hardware.fr/hfr/Achat [...] 0043_1.htm
Reply

Marsh Posté le 23-02-2012 à 15:30:10    

C'est ça je suis en mode .net 4 ;) en mode .net 2 ça reconnais bien le "var", merci pour toutes ces infos express

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed