2012-11-18 4 views
5

Ce code recherche une zone riche et remplace le premier champ du tableau dans le second. Tout fonctionne bien sauf pour deux des champs.Comment faire pour échapper des caractères spéciaux dans regex?

iEmo = new string[,] { 
    {@":\)", Smile}, 
    {@":\(", Sad}, 
    {@"8\)", Cool}, 
    {@":\|", Neutral}, 
    {@";\)", Wink}, 
    {@">:\(", Evil}, // Won't work for this one 
    {@">:D", Twisted}, // Or this one 
    {@":\?", Question,} 
}; 

est ici la partie qui convertit le tableau en ce que je veux:

public void SetSmiley(RichTextBox RichBox) { 
    for (int i = 0; i < (iEmo.Length/3); i++) { 
    try { 
     RichBox.Rtf = Regex.Replace(RichBox.Rtf, iEmo[i, 0], iEmo[i, 1], RegexOptions.IgnoreCase); 
    } 
    catch (Exception e){} 
    } 
} 
+0

Oui mon erreur, même si elle a été éditée par "Bart" il ya 1 minute. Merci. – user1667191

+0

Pourquoi utilisez-vous des expressions régulières? Pourquoi ne pas juste normal 'String.Replace'? –

+0

J'ai également essayé cette méthode, mais encore une fois, elle produit toujours mon problème original. – user1667191

Répondre

5

Votre expression régulière a l'air bien, mais je vois quelques choses qui l'empêchent de travailler:

for (int i = 0; i < (iEmo.Length/3); i++) 

Je ne sais pas pourquoi vous divisez par 3. Vous devriez utiliser ici la longueur de la première dimension:

for (int i = 0; i < iEmo.GetLength(0); i++) 

En outre, en raison de l'ordre dans lequel vos remplacements se produisent, le froncement normal ":(" sera remplacé avant le "mal" visage ">:(". Au moment où la boucle arrive au cas maléfique, la chaîne ressemble à ">Sad". Votre devrait réorganiser vos remplacements en complexité décroissant, quelque chose comme ceci:

iEmo = new string[,] 
{ 
    {@">:\(", Evil}, 
    {@":\)", Smile}, 
    {@":\(", Sad}, 
    {@"8\)", Cool}, 
    {@":\|", Neutral}, 
    {@";\)", Wink}, 
    {@">:D", Twisted}, 
    {@":\?", Question,} 
}; 

Et encore, le remplacement de la chaîne normale fonctionnera bien avec les changements ci-dessus.

+0

Freaking génial mec merci! Cela l'a réparé !! – user1667191

Questions connexes