最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用for循環(huán)移除HTML標(biāo)記

 更新時(shí)間:2016年08月19日 09:18:55   作者:Jaxu  
大家在項(xiàng)目開發(fā)階段移除文字中的html標(biāo)記最常用的方法就是使用正則表達(dá)式,但是正則表達(dá)式不能處理所有的html文檔,所以采用迭代方式會更好,下面小編給大家解答下

移除一段文字中的HTML標(biāo)記,以消除其中包含的樣式和段落等,最常用的辦法可能就是正則表達(dá)式了。但是請注意,正則表達(dá)式并不能處理所有的HTML文檔,所以有時(shí)采用一個(gè)迭代的方式會更好,如for循環(huán)。

看下面的代碼:

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.Replace(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.Replace(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標(biāo)記,一個(gè)是使用正則表達(dá)式,一個(gè)是使用字符數(shù)組在for循環(huán)中進(jìn)行處理。來看一下測試的結(jié)果:

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));
}
}

  輸出結(jié)果如下:

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.

  上述代碼中分別調(diào)用了HtmlRemoval類中的三個(gè)不同的方法,均返回了相同的結(jié)果,即去除了給定字符串中的HTML標(biāo)記。推薦使用第二種方法,即直接引用一個(gè)預(yù)先定義好的RegexOptions.Compiled的正則表達(dá)式對象,它比第一種方法速度更快。但是RegexOptions.Compiled有一些缺點(diǎn),在某些情況下它的啟動(dòng)時(shí)間會增加數(shù)十倍。具體的內(nèi)容可以查看下面這兩篇文章:

RegexOption.Compiled
Regex Performance

  通常,正則表達(dá)式的執(zhí)行效率并不是最高的,所以HtmlRemoval類中給定了另一種方法,使用字符數(shù)組來處理字符串。測試程序提供了1000個(gè)HTML文件,每個(gè)HTML文件中有大約8000個(gè)字符,所有的文件均通過File.ReadAllText方式進(jìn)行讀取,測試結(jié)果顯示字符數(shù)組的方式執(zhí)行速度是最快的。

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

  所以,使用字符數(shù)組來處理大批量的文件時(shí)可以節(jié)省時(shí)間。在字符數(shù)組方法中,僅僅只是將非HTML標(biāo)記的字符添加到數(shù)組緩沖區(qū),為了提高效率,它使用字符數(shù)組和一個(gè)新的字符串構(gòu)造器來接收字符數(shù)組和范圍,這個(gè)會比使用StringBuilder速度更快。

對于自關(guān)閉的HTML標(biāo)記

  在XHTML中,某些標(biāo)記并不具有獨(dú)立的關(guān)閉標(biāo)簽,如<br/>,<img/>等。上述代碼應(yīng)該能夠正確處理自關(guān)閉的HTML標(biāo)記。下面是一些支持的HTML標(biāo)記,注意,正則表達(dá)式方法可能無法正確處理無效的HTML標(biāo)記。

Supported tags

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

HTML文檔中的注釋

  本文給出的代碼對移除HTML文檔注釋中的HTML標(biāo)記可能會失效。有些時(shí)候,注釋中可能會包含一些無效的HTML標(biāo)記,在處理時(shí)這些HTML標(biāo)記不會被完全移除。但是,掃描這些不正確的HTML標(biāo)記有時(shí)可能是必要的。

如何驗(yàn)證

  有許多種方法可以用來驗(yàn)證XHTML,我們可以采用和上面代碼相同的方式來進(jìn)行迭代。一個(gè)簡單的方法是對'<'和'>'進(jìn)行計(jì)數(shù),從而確定它們是否匹配,或者采用正則表達(dá)式進(jìn)行匹配。這里有一些資源介紹了這些方法:

HTML Brackets: Validation

Validate XHTML

  有許多方法都可以用來去除給定字符串中的HTML標(biāo)記,它們返回的結(jié)果也都是正確的。毫無疑問,采用字符數(shù)組進(jìn)行迭代的效率最高。

以上所述是小編給大家介紹的C#使用for循環(huán)移除HTML標(biāo)記 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C#如何Task執(zhí)行任務(wù),等待任務(wù)完成

    C#如何Task執(zhí)行任務(wù),等待任務(wù)完成

    這篇文章主要介紹了C#如何Task執(zhí)行任務(wù),等待任務(wù)完成,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#中ArrayList的使用方法

    C#中ArrayList的使用方法

    這篇文章主要介紹了
    2013-12-12
  • C#將字母或數(shù)字加密成字母的方法

    C#將字母或數(shù)字加密成字母的方法

    這篇文章主要介紹了C#將字母或數(shù)字加密成字母的方法,涉及C#操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#實(shí)現(xiàn)自定義定時(shí)組件的方法

    C#實(shí)現(xiàn)自定義定時(shí)組件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)自定義定時(shí)組件的方法,很實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • 深入分析C# Task

    深入分析C# Task

    這篇文章主要介紹了C# Task的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí)C# Task的相關(guān)知識,感興趣的朋友可以了解下
    2020-08-08
  • C#溫故而知新系列教程之閉包

    C#溫故而知新系列教程之閉包

    閉包是將一些執(zhí)行語句的封裝,可以將封裝的結(jié)果像對象一樣傳遞,在傳遞時(shí),這個(gè)封裝依然能夠訪問到原上下文。下面這篇文章主要給大家介紹了關(guān)于C#中閉包的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • C#根據(jù)Word模版生成Word文件

    C#根據(jù)Word模版生成Word文件

    這篇文章主要為大家詳細(xì)介紹了C#根據(jù)Word模版生成Word文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 詳解WPF中的對象資源

    詳解WPF中的對象資源

    這篇文章主要介紹了WPF中對象資源的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用WPF,感興趣的朋友可以了解下
    2021-04-04
  • C#?單例模式的多種實(shí)現(xiàn)方式

    C#?單例模式的多種實(shí)現(xiàn)方式

    單例模式是一種確保類只有一個(gè)實(shí)例的設(shè)計(jì)模式,主要用于提供全局訪問點(diǎn),C#中實(shí)現(xiàn)單例的方法多樣,包括餓漢式和懶漢式,各有優(yōu)缺點(diǎn),此外,單例模式不僅提高代碼可重用性和可讀性,還增強(qiáng)了系統(tǒng)的可維護(hù)性
    2024-11-11
  • C#實(shí)現(xiàn)帶進(jìn)度條的ListView

    C#實(shí)現(xiàn)帶進(jìn)度條的ListView

    這篇文章主要介紹了C#實(shí)現(xiàn)帶進(jìn)度條的ListView 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評論

青岛市| 磐石市| 海丰县| 临猗县| 晋中市| 自治县| 唐河县| 乐陵市| 合肥市| 乡城县| 临邑县| 永川市| 马公市| 南陵县| 上犹县| 富川| 黄冈市| 吉安县| 黎川县| 长宁县| 高雄市| 微博| 汽车| 鄂托克旗| 南安市| 砀山县| 临高县| 新津县| 百色市| 浏阳市| 南康市| 大石桥市| 齐齐哈尔市| 房产| 长葛市| 萝北县| 会宁县| 张掖市| 汪清县| 屏山县| 伊宁市|