如何正确附加文本以替换部分原始文本

本文关键字:文本 替换部 原始 何正确 | 更新日期: 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);