5

此代码搜索富文本框并将数组的第一个字段替换为第二个字段。除了两个字段外,一切都很好。

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){}
  }
}
4

1 回答 1

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,}
};

同样,正常的字符串替换将适用于上述更改。

于 2012-11-18T03:01:17.307 回答