【问题标题】:Replace found strings with new strings?用新字符串替换找到的字符串?
【发布时间】:2013-11-10 12:26:23
【问题描述】:

我有一个打开 XML 文件的打开文件对话框。正则表达式查找> 和< 之间的每个字符串,并将每个字符串换行写入富文本框。

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        StreamReader sr = new StreamReader(openFileDialog1.FileName);
        string s = sr.ReadToEnd();
        richTextBox1.Text = s;
    }

    string txt = richTextBox1.Text;
    var foundWords = Regex.Matches(txt, @"(?<=>)([\w ]+?)(?=<)");
    richTextBox1.Text = string.Join("\n", foundWords.Cast<Match>().Select(x => x.Value).ToArray());
}

然后我可以更改这些字符串。但是如何将这些更改的字符串导入到原来的 XML 文件中?

【问题讨论】:

    标签: c# xml regex


    【解决方案1】:

    您可以尝试在文件中替换这些字符串,但是一旦您替换了不同长度的内容,直接写入整个文件会更简单。

    看起来用户能够修改这些字符串 - 这是您面临的挑战:您必须跟踪原始文件中的哪个单词,才能将它们替换回数据中。此外,用户可以在文本框中删除或添加行,在这种情况下您的应用程序会做什么?

    使用XDocument 处理xml 文件并存储包含原始值的XElements 会更容易。 XDocument 允许您替换这些值并存储文件。

    请注意,由于您没有明确关闭StreamReader,因此当您尝试写入该文件时,该文件可能仍在使用中。只需将StreamReader 放在using 块中即可防止这种情况发生。

    【讨论】:

    • 但是如何用新字符串重写整个文件?
    • @orglce 我建议您修改内存中的字符串,然后再次写入整个文件。一旦用户修改了这些字符串,虽然无法自动将修改后的版本放回去,所以你需要以某种方式记住哪个字符串去了哪里。
    • 好的!谢谢!我会努力做到的!
    • 也许用DataGridView替换RichTextBox,定义两列(第一:原始文本,第二:替换),用找到的单词填充它,然后在编辑后遍历所有行datagrid 并按照上述方法进行替换。
    • @C.Evenhuis 会很整洁,并且根据是否应该替换所有出现的文本,文本可能会被分组在第一列中,List&lt;XElement&gt; 可能会存储在Tag
    猜你喜欢
    • 2022-06-14
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2018-01-14
    • 2017-09-04
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多