用于删除多个<a> tag in Html</a>的正则表达式

时间:2012-12-21 10:50:59

标签: c# .net regex

我想从以下html中获取此html中的第一个标记,仅在此div class="itemcategories"中提供,以及删除任何仅在使用正则表达式标记之后出现的标记的内容。我别无选择,只能使用正则表达式。

  <div class="itemcategories">
        Categories: 
      <a id="1234" class="category" rel="abc" href="#">ABC</a>,
      <a id="1234" class="category" rel="abc" href="#">DEF</a>,
      <a id="1234" class="category" rel="abc" href="#">XYZ</a>
 </div>

结果应如下所示

 <div class="itemcategories">
        Categories: 
      <a id="1234" class="category" rel="abc" href="#">ABC</a>         
 </div>

5 个答案:

答案 0 :(得分:0)

您不需要使用Regex。这是一种非常粗糙的方式,但它应该有效。

string html = "... html goes here";
string cleanedUpHtml = html.Substring(0, html.IndexOf("</a>") + 4) + "</div>";

答案 1 :(得分:0)

string html = ...
string rem = Regex.Match(html, "<a .+?</a>(.+?)</div>", RegexOptions.Singleline).Result("$1");
html = html.Replace(rem, String.Empty);

答案 2 :(得分:0)

尝试:

var str = "" ;// Your String goes Here.
var firstPos = str.indexOf("<a");
var lastPos = str.lastIndexOf("</a>");
var regex = new RegExp("\<a.*a\>");
var firstTag = str.match(regex);
var str1 = str.slice(0,firstPos);
var str2 = str.slice(lastPos);
str = str.replace(regex, "");
str = str1 + (firstTag.toString().split(",")[0]).toString() + str2;

答案 3 :(得分:0)

如果你真的想要这个,正如你所看到的那样,在div中,每个元素都用逗号分隔,所以你可以尝试:

string result = Regex.Replace(your_html, ",.+</a>", "", RegexOptions.Singleline)  

或者:

string result = Regex.Replace(html, "(!?,)<a .+a>(?=</div>)", "", RegexOptions.Singleline)

答案 4 :(得分:0)

使用此正则表达式:

(<div.*?<a.*?</a>)(?:.*?</a>)*.*?(</div>)

它将返回2组。第一组将从第一行末尾的<div开始到</a>。第二组将包含结束</div>。只需连接这两个组就可以得到你需要的东西。