2009-11-12 78 views
1

我需要執行一個任務是從網頁中獲取一些html。在網頁內有評論,我需要從評論中獲取html。我希望下面的例子可以幫助。我需要它在c#中完成。正則表達式來獲得html沒有評論

<!--get html from here--> 
<div><p>some text in a tag</p></div> 
<!--get html from here--> 

我想它返回

<div><p>some text in a tag</p></div> 

我將如何做到這一點?

+3

參見:http://stackoverflow.com/questions/56107/what-is-the-best-way-to-parse-html-in-c – 2009-11-12 13:39:08

回答

2

如何找到第一個分隔符的索引,第二個分隔符的索引和「裁剪」字符串?聽起來更簡單一些,可能和一樣有效。

2

正則表達式不適用於HTML。如果您真的想要處理HTML的所有榮耀,請考慮HtmlAgilityPack,如本問題中所討論的。 Looking for C# HTML parser

最簡單的事情能夠工作是:

string pageBuffer=...; 
string wrapping="<!--get html from here-->"; 
int firstHitIndex=pageBuffer.IndexOf(wrapping) + wrapping.Length; 
return pageBuffer.Substring(firstHitIndex, pageBuffer.IndexOf(wrapping, firstHitIndex) - firstHitIndex)); 

(錯誤檢查兩種標記均存在)

根據您的背景下,華廷可能是有用的(如果沒有你在服務器中,但是如果你在客戶端並且做了一些更有趣的事情,可以從完整的HTML解析中獲益)。

2

如果所有實例的格式相似,則可以使用類似的表達式

<!--[^(-->)]*-->(.*)<!--[^(-->)]*--> 

將檢索兩個評論之間的所有內容。如果您的評論你的「獲取HTML從這裏」文本明確定義,你能更具體:

<!--get html from here-->(.*)<!--get html from here--> 

當您在該字符串運行正則表達式,Groups集合將包含註釋之間的HTML。

+0

這是不對的。 '[^( - >)]'是一個字符類,它匹配除了'() - >'之外的任何**一個**字符。你可能會想到前瞻:'(?:(?! - >)。)*' - 零個或多個任何字符,除非接下來的三個字符是' - >'。這是一個非常常見的錯誤。 – 2009-11-12 14:12:40

+0

你應該也可以使用懶惰量詞*?因爲*是貪婪的並且會很高興地吃掉一堆評論,直到它到達文檔中的最後一個。 – 2009-11-12 15:15:20

+0

好點,兩者。 – 2009-11-12 15:46:39

0

我遇到了這樣一個剝離HTML註釋的要求。我一直在尋找一些基於正則表達式的解決方案,這樣它就可以使用自由風格的評論以及其下的任何類型的字符。

我試過了,它對於單行,多行,帶有Unicode字符和符號的註釋非常合適。

<!--[\u0000-\u2C7F]*?-->