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標志 ,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!