替换格式文本框中的所有文本
本文关键字:文本 格式 替换 | 更新日期: 2023-09-27 18:31:58
我在尝试替换与rich text box
中特定单词匹配的所有文本时遇到问题。这是我使用的代码
public static void ReplaceAll(RichTextBox myRtb, string word, string replacer)
{
int index = 0;
while (index < myRtb.Text.LastIndexOf(word))
{
int location = myRtb.Find(word, index, RichTextBoxFinds.None);
myRtb.Select(location, word.Length);
myRtb.SelectedText = replacer;
index++;
}
MessageBox.Show(index.ToString());
}
private void btnReplaceAll_Click(object sender, EventArgs e)
{
Form1 text = (Form1)Application.OpenForms["Form1"];
ReplaceAll(text.Current, txtFind2.Text, txtReplace.Text);
}
这效果很好,但是当我尝试用它自己和另一个字母替换一个字母时,我注意到一个小故障。
例如,我想用 ea
替换 Welcome to Nigeria
中的所有e
。
这就是我得到Weaalcomeaaaaaaa to Nigeaaaaaaaaaaaaaaria
.
消息框显示23
只有三个e
。请问我做错了什么以及如何纠正它
只需这样做:
yourRichTextBox.Text = yourRichTextBox.Text.Replace("e","ea");
如果要报告匹配项(被替换)的数量,可以尝试使用如下Regex
:
MessageBox.Show(Regex.Matches(yourRichTextBox.Text, "e").Count.ToString());
更新
当然,使用上面的方法在内存上成本很高,你可以结合Regex
使用一些循环来实现某种像这样的高级替换引擎:
public void ReplaceAll(RichTextBox myRtb, string word, string replacement){
int i = 0;
int n = 0;
int a = replacement.Length - word.Length;
foreach(Match m in Regex.Matches(myRtb.Text, word)){
myRtb.Select(m.Index + i, word.Length);
i += a;
myRtb.SelectedText = replacement;
n++;
}
MessageBox.Show("Replaced " + n + " matches!");
}