我想从源代码中删除它们之间的标记和内容..
以下是我的来源:
<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);
但它不起作用。
请告知。
答案 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);
}