2012-11-18 125 views
5

此代碼搜索richtextbox並將數組的第一個字段替換爲第二個字段。除了兩個字段之外,它一切正常。如何逃避正則表達式中的特殊字符?

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

這裏是一個數組轉換成部分我想:

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

是的,我的錯誤,雖然它是由「巴特」編輯1分鐘前。謝謝。 – user1667191

+0

你爲什麼使用正則表達式?爲什麼不只是普通的'String.Replace'? –

+0

我也嘗試過這種方法,但是它仍然會產生我原來的問題。 – user1667191

回答

5

你的正則表達式看起來不錯,但我看到的是阻止它工作的幾件事情:

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

我不知道爲什麼你除以3.你應該使用第一維的長度在這裏,而不是:

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

此外,由於您的替換髮生的順序,正常的皺眉":("將被替換爲「邪惡」的臉">:("之前。當循環到達邪惡的情況時,字符串看起來像">Sad"。你應該重新安排你的替代遞減的複雜性,這樣的事情:

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

再次,正常的字符串替換將罰款與上述變化。

+0

令人敬畏的花花公子感謝!修好了! – user1667191