替换C#中包含C#中html格式字符串的文本

时间:2018-02-10 15:02:28

标签: c# html string replace

我想要做的是替换剪贴板中的部分文本,但问题是它是html格式的文本,我无法使用C#中的下面给出的代码修改其内容。任何解决方案?

复制我的行为的步骤:

将剑桥高级学习者词典4中的条目复制到剪贴板或将任何其他html格式的文本复制到剪贴板
2-在Windows窗体应用程序中使用这些C#代码来修改和替换文本,同时保持其html格式:

private void button1_Click(object sender, EventArgs e)
        {

            string myStr = Clipboard.GetText(TextDataFormat.Html);
            myStr.Replace("Cambridge Advanced Learner's Dictionary - 4th Edition", "******************************");
            Clipboard.SetText(myStr,TextDataFormat.Html);

        }

但它似乎根本不起作用!

注意:我想保留html格式,我不想从其html格式中删除字符串。

我使用了Regex,它似乎在我使用时起作用:

myStr = Regex.Replace(myStr, "Cambridge Advanced Learner's Dictionary - 4th Edition", "");

但是当我想使用时:

myStr = Regex.Replace(myStr, "Cambridge Advanced Learner's Dictionary - 4th Edition<br /><br />", "");

它不起作用!任何删除这些HTML标签的解决方案:<br /><br />

3 个答案:

答案 0 :(得分:0)

您必须使用特殊HTML Clipboard Format (link to description)格式化文本。

它看起来像这样(工作示例与链接中给出的exmaple不同,它具有错误的Start-和End-数字):

Version:1.0
StartHTML:00085
EndHTML:00287
StartFragment:00105
EndFragment:00269
<!--StartFragment--><HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=UTF-8" /><TITLE></TITLE></HEAD><BODY>YOUR <B>HTML FORMATTED</B> TEXT GOES HERE!</BODY></HTML><!--EndFragment-->

同时确保在顶部填写正确的开始和结束编号。更具体地说,您必须调整EndHTMLEndFragmentEndSelection以反映文字长度的变化。单独更换是行不通的。

答案 1 :(得分:0)

使用Regex在某种程度上解决了这个问题:

private void button1_Click(object sender, EventArgs e)
        {

            string myStr = Clipboard.GetText(TextDataFormat.Html);
            myStr = Regex.Replace(myStr, "Cambridge Advanced Learner's Dictionary - 4th Edition", "");

            Clipboard.SetText(myStr,TextDataFormat.Html);

        }

但仍无法从剪贴板中删除<br /><br />等HTML标记。

答案 2 :(得分:0)

由于HTML输入可以是任意的,以下是我建议的步骤:

  1. 假设您有办法检测剪贴板内容确实是HTML格式,请使用您选择的C#库(例如this)整理它。这将允许应用程序处理“已清理”的内容,即下面的<br><br />等HTML中断将整理到标准<br/>然后你可以省略或替换它。

  2. 不要像处理HTML中断那样使用“一次性”RegEx替换,而是通过预测将来需要替换的违规HTML元素列表的新增内容,尝试使代码更灵活一些,即使用组(例如,this)。然后,您将能够为表单应用程序的用户提供一种方法来配置要忽略的元素。