Powershell删除字符串内容中的HTML标记

时间:2015-04-28 21:23:44

标签: html regex string powershell

我有一个分成小块的大型HTML数据字符串。我正在尝试编写PowerShell脚本来删除所有HTML标记,但我发现很难找到正确的正则表达式模式。

示例字符串:

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

我尝试过使用:

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

它适用于简单的示例,但上面的示例会捕获整个字符串。

有什么建议是实现这一目标的最佳途径吗?

提前致谢

3 个答案:

答案 0 :(得分:9)

对于纯正则表达式,它应该像<[^>]+>一样简单:

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

Regular expression visualization

Debuggex Demo

请注意,这可能会因某些HTML评论或<pre>标记的内容而失败。

相反,您可以使用专为.Net代码设计的HTML Agility Pack,并且我之前在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 Agility Pack适用于非完美的HTML。

答案 1 :(得分:0)

你可以试试这个:

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

答案 2 :(得分:0)

为了解决变音和特殊字符,我使用了 html 对象。这是我的功能:

Function ConvertFrom-Html
{
    [CmdletBinding(SupportsShouldProcess = $True)]
    Param(
        [Parameter(Mandatory=$true, Position=0)]
        [string]$Html
    )

    $HtmlObject = New-Object -Com "HTMLFile"
    $HtmlObject.IHTMLDocument2_write($Html)
    return $HtmlObject.documentElement.innerText
}

$html = "<p><strong>Nutzen:</strong></p><p>Der&nbspNutzen ist &uumlberaus gro&szlig."

$plaintext = ConvertFrom-Html -Html $html

$plaintext

“纳岑:

Der Nutzen ist überaus groß。”