C 使用for迴圈移除HTML標記

2022-09-26 05:24:10 字數 2735 閱讀 3986

移除一段文字中的html標記,以消除其中包含的樣式和段落等,最常用的辦法可能就是正規表示式了。但是請注意,正規表示式並不能處理所有的html文件,所以有時採用乙個迭代的方式會更好,如for迴圈。

看下面的**:

using system;

using system.text.regularexpressions;

///

/// methods to remove程式設計客棧 html from strings.

///

public static class htmlremoval

///

/// compiled regular expression for performance.

///

static regex _htmlregex = new regex("<.>", regexoptions.compiled);

///

/// remove html from string with compiled regex.

///

public static string striptagsregexcompiled(string source)

///

/// remove html tags from string using char array.

///

public static string striptagschararray(string source)

if (!inside)

}return new string(array, 0, arrayindex);

}}**中提供了兩種不同的方式來移除給定字串中的html標記,乙個是使用正規表示式,乙個是使用字元陣列在for迴圈中進行處理。來看一下測試的結果:

using system;

using system.text.regularexpressions;

class program

}輸出結果如下:

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中,某些標記並不具有獨立的關閉標籤,如

,等。上述**應該能夠正確處理自關閉的html標記。下面是一些支援的html標記,注意,正規表示式方法可能無法正確處理無效的html標記。

supported tags

< div >

html文件中的注釋

本文給出的**對移除html文件注釋中的html標記可能會失效。有些時候,注釋中可能會包含一些無效的html標記,在處理時這些html標記不會被完程式設計客棧全移除。但是,掃瞄這些不正確的html標記有時可能是必要的。

如何驗證

有許多種方法可以用來驗證xhtml,我們可以採用和上面**相同的方式來進行迭代。乙個簡單的方法是對''進行計數,從而確定它們是否匹配,或者採用正規表示式進行匹配。這裡有一些資源介紹了這些方法:

html brackets: validation

validate xhtml

有許多方法都可以用來去除給定字串中的html標記,它們返回的結果也都是正確的。毫無疑問,採用字元陣列進行迭代的效率最高。

本文標題: c#使用for迴圈移除html標記

本文位址:

用c 移除HTML外部鏈結及過濾非安全標籤

剛開始嘗試用xdocument.parse 和正則式來解析html文件,但是疑難太多了。要注意的是,錨點可以被加上有多個href屬性 同樣,某些元素可能會存在多個 onevent 屬性。這是我第一次使用c 擴充套件方法和列舉,非常有趣。using system using system.collec...

c語言中迴圈使用技巧

簡明來說不確定迴圈,不知道何時迴圈停止,而計數迴圈已知要執行多少次迴圈 其中涉及了三個重要部分 1.初始化計數器 2.計數器與有限值比較 3.每次迴圈對計數器進行有規律變化 下面用for迴圈進行舉例 for i 0 i 10 i for i 0 i 10 i 見課本習題五p138頁 17題 incl...

C語言for迴圈語句的使用

作為c語言三大迴圈語句之一的for迴圈在c語言中的也占有非常的重要地位。因此了解c語言的for迴圈語句的工作原理是非常的有必要的。也是必須的。c語言的for迴圈語句結構如下所示,這個結構非常的重要。如果沒有掌握好實用的時候很容易出錯。for 求解表示式1 求解表示式2 求解表示式3 這就是它的邏輯執...