C#如何使用正则表达式删除XML/HTML注释

Mic*_*Mit 18 c# regex

下面的片段对我不起作用.

fragment = Regex.Replace(fragment, "<!--.*?-->", String.Empty , RegexOptions.Multiline  );
Run Code Online (Sandbox Code Playgroud)

Tho*_*rin 26

将其更改为RegExOptions.Singleline相反,它将正常工作.当不处于单线模式时,点与任何字符匹配,除了换行符.

需要注意的是SinglelineMultiline不是相互排斥的.他们做两件事.引用MSDN:

多线模式.更改^和$的含义,使它们分别在任何行的开头和结尾匹配,而不仅仅是整个字符串的开头和结尾.

单线模式.更改点(.)的含义,使其匹配每个字符(而不是除\n之外的每个字符).

其他人已经建议使用HTML Agility Pack.我觉得你应该解释为什么你的正则表达式不起作用:)


And*_*are 8

请不要使用正则表达式来处理标记语言 - 您需要使用为此类作业构建的更好的工具.

请改用Html Agiliy Pack.我甚至发现这篇文章中有一个读者(名为Simon Mourier)使用Html Agility Pack从文档中删除注释的函数注释:

Simon Mourier说:

这是删除评论的示例代码:

static void Main(string[] args) 
{ 
  HtmlDocument doc = new HtmlDocument(); 
  doc.Load("filewithcomments.htm"); 
  doc.Save(Console.Out); // show before 
  RemoveComments(doc.DocumentNode); 
  doc.Save(Console.Out); // show after 
} 

static void RemoveComments(HtmlNode node)
{
    if (!node.HasChildNodes)
    {
        return;
    }

    for (int i=0; i<node.ChildNodes.Count; i++)
    {
        if (node.ChildNodes[i].NodeType == HtmlNodeType.Comment)
        {
            node.ChildNodes.RemoveAt(i);
            --i;
        }
    }

    foreach (HtmlNode subNode in node.ChildNodes)
    {
        RemoveComments(subNode);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 代码示例不起作用.枚举集合时,无法修改节点 (7认同)