7

我正在编写一个程序,该程序应该从字符串中去除 html 标签。我一直在尝试替换所有以“<”开头并以“>”结尾的字符串。这(显然是因为我在这里问这个)到目前为止还没有奏效。这是我尝试过的:

StrippedContent = Regex.Replace(StrippedContent, "\<.*\>", "")

这只是返回原始字符串的随机部分。我也试过

For Each StringMatch As Match In Regex.Matches(StrippedContent, "\<.*\>")
    StrippedContent = StrippedContent.Replace(StringMatch.Value, "")
Next

哪个做了同样的事情(返回看起来像是原始字符串的随机部分)。有一个更好的方法吗?更好的意思是一种有效的方式。

4

3 回答 3

32

描述

该表达式将:

  • 查找并替换所有标签
  • 避免有问题的边缘情况

正则表达式:<(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*>

替换为:无

在此处输入图像描述

例子

示例文本

注意鼠标悬停功能中的困难边缘情况

these are <a onmouseover=' href="NotYourHref" ; if (6/a>3) { funRotator(href) } ; ' href=abc.aspx?filter=3&prefix=&num=11&suffix=>the droids</a> you are looking for.

代码

Imports System.Text.RegularExpressions
Module Module1
  Sub Main()
    Dim sourcestring as String = "replace with your source string"
    Dim replacementstring as String = ""
    Dim matchpattern as String = "<(?:[^>=]|='[^']*'|=""[^""]*""|=[^'""][^\s>]*)*>"
    Console.Writeline(regex.Replace(sourcestring,matchpattern,replacementstring,RegexOptions.IgnoreCase OR RegexOptions.IgnorePatternWhitespace OR RegexOptions.Multiline OR RegexOptions.Singleline))
  End Sub
End Module

替换后的字符串

these are the droids you are looking for.
于 2013-07-16T05:10:22.453 回答
4

好吧,这证明您应该始终在 Google 上搜索答案。这是我从http://www.dotnetperls.com/remove-html-tags-vbnet获得的一种方法

Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Dim html As String = "<p>There was a <b>.NET</b> programmer " +
          "and he stripped the <i>HTML</i> tags.</p>"
        Dim tagless As String = StripTags(html)
        Console.WriteLine(tagless)
    End Sub
    Function StripTags(ByVal html As String) As String
        Return Regex.Replace(html, "<.*?>", "")
    End Function
End Module
于 2013-07-16T00:18:17.817 回答
1

这是一个使用 Ro Yo Mi 发布的正则表达式模式的简单函数。

<Extension()> Public Function RemoveHtmlTags(value As String) As String
    Return Regex.Replace(value, "<(?:[^>=]|='[^']*'|=""[^""]*""|=[^'""][^\s>]*)*>", "")
End Function

示范:

Dim html As String = "This <i>is</i> just a <b>demo</b>.".RemoveHtmlTags()
Console.WriteLine(html)
于 2016-04-08T01:24:41.053 回答