2012-02-08 191 views
0

我想正則表達式來刪除以下:去除正則表達式?

<a class="a" href="a.com">string</a> 

我要的是,如果有在我想整個標籤取下(<a class="a" href="a.com"></a>)的標籤的類屬性,檢索標籤之間的字符串(string ),否則保持原樣。

+3

不要。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Oded 2012-02-08 11:18:24

+1

看看這個; http://htmlagilitypack.codeplex.com/ – 2012-02-08 11:19:38

+1

....你不想要一個正則表達式。 [你只是不](http://stackoverflow.com/q/926617/822637)。 – sq33G 2012-02-08 11:22:44

回答

3

我建議使用像HTML Agility Pack這樣的HTML解析器,而不是試圖用RegEx執行此操作 - RegEx不是解析常規HTML的好工具,因爲this answer explains

下載附帶了一堆Visual Studio項目作爲使用示例。

什麼是Html Agility Pack(HAP)?

這是一個敏捷的HTML解析器,它構建了一個讀/寫DOM並支持普通的XPATH或XSLT(實際上,您不需要理解XPATH或XSLT就可以使用它,不用擔心)。它是一個.NET代碼庫,允許您解析「離開網頁」的HTML文件。解析器對「真實世界」格式錯誤的HTML非常寬容。對象模型與提出System.Xml非常相似,但是對於HTML文檔(或流)。

Html Agility Pack現在支持Linq to Objects(通過LINQ to Xml Like界面)。查看使用此功能玩的新測試版

0

鑑於您想要解析HTML,使用XML解析器的方式會更好,這是其他人已推薦的方法。

不過既然你想正則表達式,我想出了這一點:http://regexr.com?2vuqs

<([^ ]+)([ \t]+[a-zA-Z-]+=(["'])[^\3]+?\3)*[ \t]+class=(["'])[^\4]\4([ \t]+[a-zA-Z-]+=(["'])[^\6]+?\6)*>([^<]+)</(\1)> 

這不是失敗的證明,但它應該處理大多數情況。檢查鏈接,看看它的作品。

+0

您編寫的正則表達式可以完成這項工作,但它缺少一件事,標籤之間的字符串被刪除,您是否可以改變正則表達式來保持標籤之間的字符串。 – ykh 2012-02-08 12:41:52

+0

@ user733659你想*檢索*字符串,或刪除它周圍的標籤,並將其保留在文本中?無論哪種方式,你應該使用正則表達式替換,而不是用空字符串替換,而是使用組合「$ 7」,這是標籤內的文本。 – 2012-02-08 13:39:10