我需要執行一個任務是從網頁中獲取一些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>
我將如何做到這一點?
我需要執行一個任務是從網頁中獲取一些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>
我將如何做到這一點?
如何找到第一個分隔符的索引,第二個分隔符的索引和「裁剪」字符串?聽起來更簡單一些,可能和一樣有效。
正則表達式不適用於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解析中獲益)。
如果所有實例的格式相似,則可以使用類似的表達式
<!--[^(-->)]*-->(.*)<!--[^(-->)]*-->
將檢索兩個評論之間的所有內容。如果您的評論你的「獲取HTML從這裏」文本明確定義,你能更具體:
<!--get html from here-->(.*)<!--get html from here-->
當您在該字符串運行正則表達式,Groups集合將包含註釋之間的HTML。
這是不對的。 '[^( - >)]'是一個字符類,它匹配除了'() - >'之外的任何**一個**字符。你可能會想到前瞻:'(?:(?! - >)。)*' - 零個或多個任何字符,除非接下來的三個字符是' - >'。這是一個非常常見的錯誤。 – 2009-11-12 14:12:40
你應該也可以使用懶惰量詞*?因爲*是貪婪的並且會很高興地吃掉一堆評論,直到它到達文檔中的最後一個。 – 2009-11-12 15:15:20
好點,兩者。 – 2009-11-12 15:46:39
我遇到了這樣一個剝離HTML註釋的要求。我一直在尋找一些基於正則表達式的解決方案,這樣它就可以使用自由風格的評論以及其下的任何類型的字符。
我試過了,它對於單行,多行,帶有Unicode字符和符號的註釋非常合適。
<!--[\u0000-\u2C7F]*?-->
參見:http://stackoverflow.com/questions/56107/what-is-the-best-way-to-parse-html-in-c – 2009-11-12 13:39:08