这是我的代码:
if (richTextBox1.SelectedText.Length > 0)
{
for (int i = 0; i<=richTextBox1.SelectedText.Length-8;i++)
{
if (richTextBox1.SelectedText.Substring(i, 7) == "http://")
{
richTextBox1.Select(i, 7);
richTextBox1.SelectedText = "";
richTextBox1.DeselectAll();
}
}
}
这适用于button click
事件。它类似于“删除格式”选项。用户应该从richTextBox中选择某个区域,程序应该查找超链接(以“http://”开头的东西)并从中删除“http://”。它有效,但并非总是如此。有时它会替换richTextBox中的随机文本,而不是替换我想要的字符串。
我该怎么办?
答案 0 :(得分:0)
如果您只需要从选择中替换给定的文本,那么想知道为什么要迭代所有文本?
通过这种方式替换文字会出现什么问题?
if (richTextBox1.SelectedText.Length > 0)
{
string selectedText = richTextBox1.SelectedText;
string replacedText= selectedText.Replace("http://", "");
richTextBox1.SelectedText = replacedText;
richTextBox1.DeselectAll();
}
答案 1 :(得分:0)
如果您只需要替换一种模式,那么您的代码可能只是:
string pattern = "http://";
if (richTextBox1.SelectedText.Length > 0)
richTextBox1.SelectedText = richTextBox1.SelectedText.Replace(pattern, string.Empty);
如果您有多个模式并且模式很简单(只是文本),则可能是:
string[] Patterns = new string[] { "https://", "http://" };
if (richTextBox1.SelectedText.Length > 0)
{
string text = richTextBox1.SelectedText;
richTextBox1.SelectedText = Patterns.Select(s => text = text.Replace(s, string.Empty)).Last();
}
如果您有多个模式且模式更复杂,则可以使用Regex.Replace
。这样的事情:
using System.Text.RegularExpressions;
string[] Patterns = new string[] { "https://", "http://" };
if (richTextBox1.SelectedText.Length > 0)
{
string text = richTextBox1.SelectedText;
richTextBox1.SelectedText = Patterns.Select(s => (text = Regex.Replace(text, s, string.Empty, RegexOptions.IgnoreCase))).Last();
}