2012-11-18 19 views
5

Questo codice ricerca un richtextbox e sostituisce il primo campo dell'array nel secondo. Funziona tutto bene tranne che per due campi.Come sfuggire ai caratteri speciali nell'espressione regolare?

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

Ecco la parte che converte l'array in quello che voglio:

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

Sì errore, anche se è stato modificato da "Bart" 1 minuto fa. Grazie. – user1667191

+0

Perché stai usando le espressioni regolari? Perché non solo normale 'String.Replace'? –

+0

Ho anche provato questo metodo, ma ancora, produce ancora il mio problema originale. – user1667191

risposta

5

tua espressione regolare guarda bene, anche se vedo alcune cose che impediscono da lavorare:

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

Non ho idea del motivo per cui stai dividendo per 3. Dovresti invece utilizzare la lunghezza della prima dimensione qui:

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

Inoltre, a causa dell'ordine in cui si verificano le sostituzioni, il cipiglio normale ":(" verrà sostituito prima della faccia "malvagia" ">:(". Nel momento in cui il ciclo arriva al caso malvagio, la stringa appare come ">Sad". Il tuo dovrebbe riorganizzare le sostituzioni in ordine decrescente di complessità, qualcosa di simile:

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

E ancora, normale sostituzione di stringa funzionerà bene con le modifiche di cui sopra.

+0

Freaking tizio fantastico grazie! Questo l'ha risolto !! – user1667191

Problemi correlati