如何在c#中删除它们之间的html标签和内容?

时间:2012-02-12 16:35:04

标签: asp.net regex

我想从源代码中删除它们之间的标记和内容..

以下是我的来源:

<tr>
  <td class="ds_label" width="40%" style="font-size: 70%;"></td>
  <td id="table_cell_1585" class="ds_label">
    <a class="tt" href="#" onClick="return false;">
      <table class="tooltip" style="width:300px;" cellpadding="0" cellspacing="0" border=0>
    </a>
  </td>
  <td class="ds_data" width="60%" style="font-size: 70%">800 x 480 pixels</td>
</tr>

我想删除包含内容的整个<a>标记。

我用过这个: 响应包含我的源代码。

response = Regex.Replace(response, "<a>(.|\n)*?</a>", string.Empty);

但它不起作用。

请告知。

4 个答案:

答案 0 :(得分:2)

正则表达式不是解析HTML的好工具。请看一下HTMLAgilityPack,以节省一些工作。

答案 1 :(得分:2)

  • 首先,尽量避免使用正则表达式来处理HTML,这是错误的工具,因为有太多边缘情况可靠或安全。使用旨在使用结构化文档的框架,如HTMLAgilityPack

  • 当您使用文字字符串在c#中定义正则表达式时,最好使用verbatim string literal(前缀为@),因此模式中的转义字符不会被解释作为文字字符串的一部分。对于此问题,@"<a>(.|\n)*?</a>"将阻止\n被视为c#中的转义字符。

  • 新行可以包含\r和 - 或\n

  • HTML A标记包含href等属性,因此<a>

  • >不太可能匹配任何内容
  • 在options参数中使用RegexOptions.Singleline以确保.匹配任何字符,包括换行符。


本单元测试成功。

[Test]
public void Test()
{
    Regex pattern = new Regex(@"<a.*?</a>", RegexOptions.Singleline);
    string input = "foo <a href=\"//example.com\">\r\nbaz</a> bar";
    string expected = "foo  bar";
    string actual = pattern.Replace(input, string.Empty);
    Assert.AreEqual(expected, actual);
}

但是,请注意,这不是处理用户输入或任何未预定义的数据的安全方法,因为这样的正则表达式很容易被规避。

答案 2 :(得分:1)

使用此

variable = Server.HtmlDecode(variable).Trim();

答案 3 :(得分:0)

试试这个正则表达式:

<a\b[^>]*>(.*?)</a>

    [TestMethod]
        public void TestMethod1()
        {
            var source =
                @"
<tr>
  <td class='ds_label' width='40%' style='font-size: 70%;\'></td>
  <td id='table_cell_1585' class='ds_label'>
    <a class='tt' href='#' onClick='return false;'>
      <table class='tooltip' style='width:300px;' cellpadding='0' cellspacing='0' border=0>
    </a>
  </td>
  <td class='ds_data' width='60%' style='font-size: 70%'>800 x 480 pixels</td>
</tr>";
            source = Regex.Replace(source, "<a [^>]*>", string.Empty);
            source = Regex.Replace(source, "</a>", string.Empty);
            Console.Write(source);
        }