2015-04-28 104 views
3

我有一個大的HTML數據字符串分成小塊。我正在嘗試編寫一個PowerShell腳本來刪除所有的HTML標記,但我發現很難找到正確的正則表達式模式。Powershell刪除字符串內容中的HTML標記

例字符串:

<p>This is an example</br>of various <span style="color: #445444">html content</span> 

我已經嘗試使用:

$string -replace '\<([^\)]+)\>','' 

它與簡單的例子,但那些,如上述它捕獲整個字符串。

任何建議什麼是最好的方式來實現這一目標?

在此先感謝

回答

6

對於一個純粹的正則表達式,它應該是那麼容易,因爲<[^>]+>

$string -replace '<[^>]+>','' 

Regular expression visualization

Debuggex Demo

請注意,這可能會因某些HTML註釋或<pre>標記的內容而失敗。

相反,你可以使用HTML Agility Pack,這是專爲在.net代碼中使用,而我以前用它成功地在PowerShell中:

Add-Type -Path 'C:\packages\HtmlAgilityPack.1.4.6\lib\Net40-client\HtmlAgilityPack.dll' 

$doc = New-Object HtmlAgilityPack.HtmlDocument 
$doc.LoadHtml($string) 
$doc.DocumentNode.InnerText 

HTML敏捷性包效果很好非完美的HTML 。

+1

謝謝你完美地工作 – Arturski

+0

你最終使用正則表達式還是解析器? – briantist

+0

我用的正則表達式,迄今爲止運行良好,因爲我的腳本已經相當大,我手動解析的HTML,但圖書館看起來相當不錯,我會嘗試在我的其他項目,謝謝 – Arturski

0

你可以試試這個:

$string -replace '<.*?>',''