我需要从带有标签的字符串中删除属性。
这是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>.
感谢你的帮助。
答案 0 :(得分:0)
对于您的示例,您可以使用:
(<(?!input)[^\s>]+)[^>]*(>)
替换为$1$2
。
我不确定您打算如何指定白名单。如果您可以对其进行硬编码,那么您可以轻松地向上面添加更多(?!whitelistTag)
,这也可以通过编程方式从数组中轻松完成。
在回应通常的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解析器可以用于作业,但它很难使使用正则表达式的想法失效。