如何正确附加文本以替换部分原始文本
本文关键字:文本 替换部 原始 何正确 | 更新日期: 2023-09-27 17:56:11
我在文本框中插入文本时遇到问题。实际上,我正在尝试做的是从"richTextBox1"中复制一段文本,对其进行处理,然后将处理后的数据插入"richTextbox2"(上面的"richTextBox2"中已经有文本。处理后的文本应位于下方。
我遇到的问题是,每次我单击按钮进行处理而不是替换文本时,它只会添加另一个文本块。我不确定如何替换它而不是添加它。
例如,我的 richTextbox2 起初看起来像这样:
"你好",我叫布鲁斯
我点击btn元音,它看起来像这样:
你好,我叫布鲁斯
"嗯",我的 nm s Brc
上面很好,但问题是现在如果我点击 btnAlpha,它会显示这个:
你好,我叫布鲁斯
"嗯",我的 nm s Brc 你好,我的名字是布鲁斯
我希望它去:
"你好",我叫布鲁斯
你好,我叫布鲁斯
有人有什么想法吗?
/* already at start of richTextBox2 when clicking on a different button:
string nl = System.Environment.NewLine;
string copyText = richTextBox1.Text;
richTextBox2.Text = copyText;
richTextBox2.AppendText(lineBreak + "----------------------" + lineBreak);
*/
private void btnVowels_Click(object sender, EventArgs e)
{
string copyText = richTextBox1.Text;
string vowels = "AaEeIiOoUu";
copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());
richTextBox2.AppendText(copyText);
}
private void btnAlpha_Click(object sender, EventArgs e)
{
string copyText = richTextBox1.Text;
string nonAlpha = @"[^A-Za-z ]+";
string addSpace = "";
copyText = Regex.Replace(copyText, nonAlpha, addSpace);
richTextBox2.AppendText(copyText);
}
更新:
仍然没有让它工作,我已经设置了一个名为分隔符的字符串,它是-----------行,并尝试查看我是否可以选择它然后粘贴但没有运气,因为它无法识别 copyText 在我单击后调试器中的 copyText按钮:
private void btnVowels_Click(object sender, EventArgs e)
{
int startingIndex = richTextBox2.Find(divider);
string copyText = richTextBox1.Text;
string vowels = "AaEeIiOoUu";
copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());
richTextBox2.Select(startingIndex, divider.Length);
richTextBox2.SelectedText = copyText;
}
AppendText
只会将文本附加到末尾,这不是您想要的。相反,您必须找到要替换的文本并选择它。选择后,您可以覆盖它。
这是一个完整的示例。表单将其富文本框设置为说
"你好",我叫布鲁斯。
然后,当单击该按钮时,它会将"Hello"
替换为 Hi
。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Get the starting index for the content we want to replace.
int startingIndex = richTextBox1.Find("'"Hello'"");
// Select the content to be replaced.
richTextBox1.Select(startingIndex, "'"Hello'"".Length);
// Replace the content.
richTextBox1.SelectedText = "Hi";
}
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.Text = "'"Hello'", my name is Bruce";
}
}
编辑
此更新演示如何查找分隔线,获取下一行中第一个字符的索引,然后选择文本的其余部分。然后我们可以替换它。
private void btnVowels_Click(object sender, EventArgs e)
{
string copyText = this.RemoveVowelsFromString(richTextBox1.Text);
richTextBox2.AppendText(copyText);
}
private void btnAlpha_Click(object sender, EventArgs e)
{
string copyText = richTextBox1.Text;
string nonAlpha = @"[^A-Za-z ]+";
string addSpace = "";
copyText = Regex.Replace(copyText, nonAlpha, addSpace);
// Replace the content beneath the divider
string divider = "------------";
// Find the first char index of the divider line
int dividerIndex = richTextBox2.Find(divider);
// grab the line number that the divider is on
int dividerLine = richTextBox2.GetLineFromCharIndex(dividerIndex);
// get the first char on the line following the divider
int startingIndex = richTextBox2.GetFirstCharIndexFromLine(dividerLine+1);
// Select everything starting after the divider to be replaced.
richTextBox2.Select(startingIndex, richTextBox2.Text.Length - startingIndex);
// Replace the content.
richTextBox1.SelectedText = copyText;
}
private string RemoveVowelsFromString(string content)
{
string vowels = "AaEeIiOoUu";
copyText = new string(copyText.Where(c => !vowels.Contains(c)).ToArray());
return copyText;
}
似乎您不需要复制原始字符串
string nonAlpha = @"[^A-Za-z ]+";
string addSpace = "";
richTextBox1.Text = Regex.Replace(richTextBox1.Text, nonAlpha, addSpace);