2012-11-18 77 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