此代码搜索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 :(得分: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,}
};
再次,正常的字符串替换将适用于上述更改。