如何删除所有标签并获取纯文本?

Posted

技术标签:

【中文标题】如何删除所有标签并获取纯文本?【英文标题】:How to remove all tags and get the pure text? 【发布时间】:2013-04-30 15:42:53 【问题描述】:

我必须以html and CSS 格式将用户输入文本存储在我的数据库中。

案例是:

RadEditor,用户将文本从 MSWord 复制到此编辑器,然后我将此文本以该格式存储在数据库中。然后当检索报告中的数据或某些标签时,一些标签会出现在文本周围!!

我使用正则表达式来删除所有格式,但它有时会成功,但并非总是成功。

private static Regex oClearHtmlScript = new Regex(@"<(.|\n)*?>", RegexOptions.Compiled);

        public static string RemoveAllHTMLTags(string sHtml)
        

            sHtml = sHtml.Replace("&nbsp;", string.Empty);
            sHtml = sHtml.Replace("&gt;", ">");
            sHtml = sHtml.Replace("&lt;", "<");
            sHtml = sHtml.Replace("&amp;", "&");
            if (string.IsNullOrEmpty(sHtml))
                return string.Empty;

            return oClearHtmlScript.Replace(sHtml, string.Empty);
        

我问如何使用HTMLAgility 或任何可靠的方式删除所有格式以确保文本是纯的?

Note:数据库中该字段的数据类型为Lvarchar

【问题讨论】:

在我的回答中添加了另一个建议,因为第一个似乎不起作用。 【参考方案1】:

这应该会从字符串中删除所有 html 标记。

sHtml = Regex.Replace(sHtml, "<.*?>", "");

【讨论】:

还是同样的问题,例如:&lt;span style="font-size: 16pt; font-family: Simplified 它必须是有效的 HTML 标记 - 以 &lt; 开头并以 &gt; 结尾。例如,&lt;span style="font-size: 16pt; font-family: Simplified"&gt;test&lt;/span&gt; 结果test 从word复制到编辑&lt;p style="margin-right: 3.5in; text-align: left; text-indent: 0.5in; line-height: 150%; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="line-height: 150%;"&gt;رقم&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-right: 3.5in; text-align: left; text-indent: 0.5in; line-height: 150%; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="line-height: 150%;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: right; line-height: 150%; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="line-height: 150%;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: right; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: right; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;أحمد&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin-right: 2.5in; text-align: right; text-indent: 0.5in; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p style="text-align: right; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: right; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;strong&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;تحية &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="text-align: right; direction: rtl; unicode-bidi: embed;" dir="RTL"&gt;&lt;span style="font-size: 16pt; font-family: Simplified Arabic,serif;"&gt;نكتب &lt;/span&gt;【参考方案2】:

HtmlAgility 包使处理 HTML 变得容易。

HtmlDocument mainDoc = new HtmlDocument();
string htmlString = "<html><body><h1>Test</h1> more text</body></html>"
mainDoc.LoadHtml(htmlString);
string cleanText = mainDoc.DocumentNode.InnerText;

【讨论】:

【参考方案3】:

This post 推荐以下方法(并且似乎已被接受)。

Regex.Replace(myHTMLString, @"<p>|</p>|<br>|<br />", "\r\n", );
Regex.Replace(myHTMLString, @"<.+?>", string.Empty);

鉴于您仍然遇到困难,您可以尝试实例化 RadEditor 并使用 .Text 属性。我以前没有使用过 RadEditor,但我做了一些挖掘——你能试试这样的吗L

RadEditor editor = new RadEditor();
editor.Content = myHTMLString;
string plainText = editor.Text;

这可能是一项非常昂贵的操作,但我很想知道它是否有效!

【讨论】:

还是同样的问题,例如:&lt;span style="font-size: 16pt; font-family: Simplified【参考方案4】:

请参阅我的回答 here,了解如何使用 Agility Pack 完成此操作。 您可能需要稍微更改代码,以免删除少于两个字符的单词。此外,换行符也将被删除,因此您将留下一长行文本。

【讨论】:

以上是关于如何删除所有标签并获取纯文本?的主要内容,如果未能解决你的问题,请参考以下文章

Python/BeautifulSoup - 如何从元素中删除所有标签?

如何从 Node.js IMAP 模块中的正文获取纯文本

如何在 perl 中发送 HTML/纯文本邮件

如何使用 Scrapy 从网站获取所有纯文本?

除了文本,如何从文本中删除数字、标点、空格和特殊字符? [复制]

如何添加多个视图和删除视图并在删除后从视图中获取所有数据?