AppSettings 标签的正则表达式删除评论标签

Regular Expression for AppSettings Tags Removing commented tags

我想创建一个正则表达式,它应该只给我那些没有注释的 appsettings 标签。以下是测试字符串。

<a key="a" value="b"/><b key="b" value="b"/><!--<c key="c" value="c"/>-->
<d key="d" value="d"/>

到目前为止我已经想出了以下正则表达式。

(?<!<!--)<[^>]*/+>

她我正在测试

的负面前瞻
<!--

但它不起作用。任何想法。

这是另一个应用垃圾桶方法的好机会:我们想要的一切都进入第一个捕获组,其余的进入整体匹配,将被完全忽略。

实现这一目标的正则表达式可能如下所示:

<!--.*?-->|(<\s*\w+[^>]*>)

解释:

  • <!--.*?--> 第一个交替匹配 HTML 评论块和 lazy
  • 之间的所有内容
  • (<\s*\w+[^>]*>) 第二个匹配任何简单的 XHTML 标签

Demo

所以,只有当 </code> 中有一个值时,我们才会记录它。</p> <p><a href="https://ideone.com/6LXkuq" rel="nofollow noreferrer">Sample Code</a>:</p> <pre><code>using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"<!--.*?-->|(<\s*\w+[^>]*>)"; string input = @"<a key=""a"" value=""b""/><b key=""b"" value=""b""/><!--<c key=""c"" value=""c""/>--> <d key=""d"" value=""d""/>"; RegexOptions options = RegexOptions.Multiline; foreach (Match m in Regex.Matches(input, pattern, options)) { if(m.Groups[1].Success) Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index); } } }


另一种可以实现类似效果的模式是使用否定环视来断言评论标签:

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

Demo 2