使用正则表达式删除属性。只是属性值包含特殊字符"<"

时间:2015-02-05 09:32:11

标签: c# regex

我想删除html中的title属性。但是,如果标题值有'<'字符。

要清理的文字: <a href="" title="bla bla bla" /><a href="" title=" bla bl<a bla" />
输出文字 <a href="" title="bla bla bla" /><a href="" />

正如您可以看到从文本中删除第二个标题,因为标题值包含&lt;炭。

请帮助

2 个答案:

答案 0 :(得分:3)

在处理HTML时帮自己一个忙,并使用HTML解析器;例如Html Agility Pack

然后这样的任务变得如此简单:

var html = "<a href=\"\" title=\"bla bla bla\" /><a href=\"\" title=\" bla bl<a bla\" />";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

// select all nodes with title attribute
foreach (var element in doc.DocumentNode.SelectNodes("//@title"))
    // and remove it
    if (element.Attributes["title"].Value.Contains("<"))
        element.Attributes["title"].Remove();

答案 1 :(得分:3)

合适的正则表达式(用非常简单的术语)可能是:

title="[^"]*<[^"]*"

这意味着title="后跟任意数量的字符,这些字符不是",而是<,然后是任何其他数量的字符,这些字符不是",最后是{{} 1}}

然后你可以按如下方式使用它:(注意引号在C#文字字符串中加倍了)

"

在我的快速测试中,这给出了期望的结果!