程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#應用for輪回移除HTML標志

C#應用for輪回移除HTML標志

編輯:C#入門知識

C#應用for輪回移除HTML標志。本站提示廣大學習愛好者:(C#應用for輪回移除HTML標志)文章只能為提供參考,不一定能成為您想要的結果。以下是C#應用for輪回移除HTML標志正文


移除一段文字中的HTML標志,以清除個中包括的款式和段落等,最經常使用的方法能夠就是正則表達式了。然則請留意,正則表達式其實不能處置一切的HTML文檔,所以有時采取一個迭代的方法會更好,如for輪回。

看上面的代碼:

using System;
using System.Text.RegularExpressions;
/// <summary>
/// Methods to remove HTML from strings.
/// </summary>
public static class HtmlRemoval
{
/// <summary>
/// Remove HTML from string with Regex.
/// </summary>
public static string StripTagsRegex(string source)
{
return Regex.WordStr(source, "<.*?>", string.Empty);
}
/// <summary>
/// Compiled regular expression for performance.
/// </summary>
static Regex _htmlRegex = new Regex("<.*?>", RegexOptions.Compiled);
/// <summary>
/// Remove HTML from string with compiled Regex.
/// </summary>
public static string StripTagsRegexCompiled(string source)
{
return _htmlRegex.WordStr(source, string.Empty);
}
/// <summary>
/// Remove HTML tags from string using char array.
/// </summary>
public static string StripTagsCharArray(string source)
{
char[] array = new char[source.Length];
int arrayIndex = 0;
bool inside = false;
for (int i = 0; i < source.Length; i++)
{
char let = source[i];
if (let == '<')
{
inside = true;
continue;
}
if (let == '>')
{
inside = false;
continue;
}
if (!inside)
{
array[arrayIndex] = let;
arrayIndex++;
}
}
return new string(array, 0, arrayIndex);
}
}

代碼中供給了兩種分歧的方法來移除給定字符串中的HTML標志,一個是應用正則表達式,一個是應用字符數組在for輪回中停止處置。來看一下測試的成果:

using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
const string html = "<p>There was a <b>.NET</b> programmer " +
"and he stripped the <i>HTML</i> tags.</p>";
Console.WriteLine(HtmlRemoval.StripTagsRegex(html));
Console.WriteLine(HtmlRemoval.StripTagsRegexCompiled(html));
Console.WriteLine(HtmlRemoval.StripTagsCharArray(html));
}
}

  輸入成果以下:

There was a .NET programmer and he stripped the HTML tags.
There was a .NET programmer and he stripped the HTML tags.
There was a .NET programmer and he stripped the HTML tags.

  上述代碼平分別挪用了HtmlRemoval類中的三個分歧的辦法,均前往了雷同的成果,即去除給定字符串中的HTML標志。推舉應用第二種辦法,即直接援用一個事後界說好的RegexOptions.Compiled的正則表達式對象,它比第一種辦法速度更快。然則RegexOptions.Compiled有一些缺陷,在某些情形下它的啟動時光會增長數十倍。詳細的內容可以檢查上面這兩篇文章:

RegexOption.Compiled
Regex Performance

  平日,正則表達式的履行效力其實不是最高的,所以HtmlRemoval類中給定了另外一種辦法,應用字符數組來處置字符串。測試法式供給了1000個HTML文件,每一個HTML文件中有年夜約8000個字符,一切的文件均經由過程File.ReadAllText方法停止讀取,測試成果顯示字符數組的方法履行速度是最快的。

Performance test for HTML removal

HtmlRemoval.StripTagsRegex: 2404 ms
HtmlRemoval.StripTagsRegexCompiled: 1366 ms
HtmlRemoval.StripTagsCharArray: 287 ms [最快]

File length test for HTML removal

File length before: 8085 chars
HtmlRemoval.StripTagsRegex: 4382 chars
HtmlRemoval.StripTagsRegexCompiled: 4382 chars
HtmlRemoval.StripTagsCharArray: 4382 chars

  所以,應用字符數組來處置年夜批量的文件時可以節儉時光。在字符數組辦法中,僅僅只是將非HTML標志的字符添加到數組緩沖區,為了進步效力,它應用字符數組和一個新的字符串結構器來吸收字符數組和規模,這個會比應用StringBuilder速度更快。

關於自封閉的HTML標志

  在XHTML中,某些標志其實不具有自力的封閉標簽,如<br/>,<img/>等。上述代碼應當可以或許准確處置自封閉的HTML標志。上面是一些支撐的HTML標志,留意,正則表達式辦法能夠沒法准確處置有效的HTML標志。

Supported tags

<img src="" />
<img src=""/>
<br />
<br/>
< div >
<!-- -->

HTML文檔中的正文

  本文給出的代碼對移除HTML文檔正文中的HTML標志能夠會掉效。有些時刻,正文中能夠會包括一些有效的HTML標志,在處置時這些HTML標志不會被完整移除。然則,掃描這些不准確的HTML標志有時能夠是需要的。

若何驗證

  有很多種辦法可以用來驗證XHTML,我們可以采取和下面代碼雷同的方法來停止迭代。一個簡略的辦法是對'<'和'>'停止計數,從而肯定它們能否婚配,或許采取正則表達式停止婚配。這裡有一些資本引見了這些辦法:

HTML Brackets: Validation

Validate XHTML

  有很多辦法都可以用往來來往除給定字符串中的HTML標志,它們前往的成果也都是准確的。毫無疑問,采取字符數組停止迭代的效力最高。

以上所述是小編給年夜家引見的C#應用for輪回移除HTML標志 ,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved