如何在C#中使用Regex查找以特定单词开头的HTML属性?

时间:2016-02-09 13:21:26

标签: c# regex

我有html代码,jQuery为它添加随机属性,如:

<td style='font-size: x-large;' jquery9202340423042='22423423424'>

使用c#Regex我想找到并删除任何以jquery

开头的属性

我有以下代码,但它删除了所有属性:

public static void Main(string[] args)
{
     string before ="<td style='font-size: x-large;' jquery9202340423042='22423423424'>";

     //string after = Regex.Replace(before, regexImgSrc, "<$1>");
     //string regexImgSrc = @"<(table|tr|td)[^>]*?" + "jquery9202340423042" + @"\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";

    string after = Regex.Replace(before, @"(?i)<(table|tr|td)(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>", "<$1>");

     Console.WriteLine(after);
}

2 个答案:

答案 0 :(得分:2)

你需要使用它:

jqueryXXX='XXX'

哪个会替换模式RewriteCond之后的任何内容,其中XXX是任意数字

答案 1 :(得分:1)

为什么要尝试使用正则表达式?

正则表达式绝对是错误的工具 (即使粗略地看一眼,这对您来说可能并不明显)。

使用Regex 可能适用于特定情况,但始终be a brittle solution

使用像HtmlAgilityPack这样的HTML解析器,你可以更明智地处理这个问题。现在你可以这样做:

string before ="<td style='font-size: x-large;' jquery9202340423042='22423423424'>";
var doc = new HtmlDocument();
doc.LoadHtml(before);
var el = doc.DocumentNode.FirstChild;
var attrsToRemove = el.Attributes.Where(att => att.Name.StartsWith("jquery")).ToList();
attrsToRemove.ForEach(a => a.Remove());
Console.WriteLine(el.OuterHtml);