我有一个分成小块的大型HTML数据字符串。我正在尝试编写PowerShell脚本来删除所有HTML标记,但我发现很难找到正确的正则表达式模式。
示例字符串:
<p>This is an example</br>of various <span style="color: #445444">html content</span>
我尝试过使用:
$string -replace '\<([^\)]+)\>',''
它适用于简单的示例,但上面的示例会捕获整个字符串。
有什么建议是实现这一目标的最佳途径吗?
提前致谢
答案 0 :(得分:9)
对于纯正则表达式,它应该像<[^>]+>
一样简单:
$string -replace '<[^>]+>',''
请注意,这可能会因某些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 Nutzen ist überaus groß."
$plaintext = ConvertFrom-Html -Html $html
$plaintext
“纳岑:
Der Nutzen ist überaus groß。”