替换richtextbox中的部分文本

时间:2011-11-24 06:43:48

标签: c# wpf string replace

我需要将字符串中的值与在richtextbox中键入的用户进行比较。

例如:如果一个richtextbox包含string rtbText = "aaaka",我将其与另一个变量string comparable = "ka"进行比较(我希望它向后比较)。我希望来自rtbText的最后两个字母(可比较只有2个字母)被替换为预定的东西(并不重要)。 所以rtbText应该是这样的:

rtbText = "aaa(something)"

这并不需要进行比较,它只能计算comparable中的字母,并根据它可以删除rtbText中的2个字母并将其替换为其他字母。

更新: 这就是我所拥有的:

int coLen = comparable.Length;
           comparable = null;
           TextPointer caretBack = rtb.CaretPosition.GetPositionAtOffset(coLen, LogicalDirection.Backward);
           TextRange rtbText = new TextRange(rtb.CaretPosition, caretBack);
           string text = rtbText.Text;

rtbText返回一个空字符串,否则我会收到超过3个字符的错误。我究竟做错了什么?

让我再详细说明一下。我有一个列表框,其中包含用户在rtb中键入的值的替换。值(替换)来自那里,这意味着我并不需要通过整个文本来检查值。我只需要在插入之前检查值。我将这些值与我在另一个变量(comparable)中存储的值进行比较。 What needs to be done

如果您不了解某事,请告诉我。 我尽力解释需要做些什么。 谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用Regex.Replace

  // this replaces all occurances of "ka" with "Replacement"
  Regex replace = new Regex("ka");
  string result = replace.Replace("aaaka","Replacemenet");

答案 1 :(得分:1)

gumenimeda,我几周前遇到过类似的问题。我发现自己做了以下事情(我认为你将需要更改RichTextBox中不止一次出现),请注意我是为Windows Forms做的,我可以直接访问控件的Rtf文本,而不是非常确定它是否适用于您的场景:

  1. 我找到了字符串的所有可能性(例如使用IndexOf)并将它们存储在List中。例如。
  2. 按降序对列表进行排序(最大索引先行,第二行前面等)
  3. 通过删除我不需要的字符并附加我需要的字符,直接在RichTextBox中替换出事件。
  4. 步骤2中的排序是必要的,因为我们总是希望从最后一次出现到第一次出现。从第一次出现或任何其他下降开始会有一个令人不快的惊喜 - 如果你要删除的块的长度和你想要追加的块的长度是不同的长度,字符串将被修改和所有其他事件将无效(例如,如果第二次出现在第12位并且你的新字符串比原始字符串长2个字符,它将变为第14个字符)。如果我们从最后一次出现到第一次出现,这不是问题,因为字符串中的更改不会影响列表中的下一次出现。)

    当然,我不能确定这是可用于实现预期结果的最快方式。这就是我提出的以及对我有用的东西。

    祝你好运!