移除一段文字中的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 這就是它的邏輯執...