使用白名单删除属性

时间:2013-11-27 09:12:29

标签: c# regex whitelist

我需要从带有标签的字符串中删除属性。

这是C#代码:

strContent = Regex.Replace(strContent, @"<(\w+)[^>]*(?<=( ?/?))>", "<$1$2>", 
RegexOptions.IgnoreCase);

例如,此代码将替换

This is some <div id="div1" class="cls1">content</div>. This is some more <span 
id="span1" class="cls1">content</span>. This is <input type="readonly" id="input1" 
value="further content"></input>.

This is some <div>content</div>. This is some more <span>content</span>. This is 
<input></input>.

但是在删除属性时我需要一个“白名单”。在上面的示例中,我希望不能删除“input”标记属性。所以我希望输出为:

This is some <div>content</div>. This is some more <span>content</span>. This is 
<input type="readonly" id="input1" value="further content"></input>.

感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对于您的示例,您可以使用:

(<(?!input)[^\s>]+)[^>]*(>)

替换为$1$2

我不确定您打算如何指定白名单。如果您可以对其进行硬编码,那么您可以轻松地向上面添加更多(?!whitelistTag),这也可以通过编程方式从数组中轻松完成。

Working on RegExr


在回应通常的You should not parse HTML with regex时,您可以将问题改为:

This is a "quoted string", cull each "quoted string to its" first word unless the "string starts with" the word "string, like these last two".

您是否声称不应使用正则表达式来解决该问题?因为它完全是同一个问题。当然,HTML解析器可以用于作业,但它很难使使用正则表达式的想法失效。