【问题标题】:How to modify/update a set of html files with a standard header and footer如何使用标准页眉和页脚修改/更新一组 html 文件
【发布时间】:2009-11-06 11:23:57
【问题描述】:

我有一组要通过替换页眉和页脚来修改的 html 文件。每个文件的内容都不同,我想使用正则表达式(如果 RE 无法处理多行查询,则使用类似的表达式)。

作为一个例子,我想做的一个修改是用标准标题替换 和 之间的所有内容。

这可以用正则表达式来完成吗?你会使用什么方法在 C# 中执行这样的批量搜索和替换?

你能提供一个匹配多行的正则表达式的例子吗?

【问题讨论】:

    标签: c# html regex replace


    【解决方案1】:

    嗯,简单的答案是,是的。

    Regex 确实可以帮助您,但您需要一个可以处理多个文件的工具。我目前无法推荐任何内容,请尝试谷歌搜索“多文件搜索和替换”。正则表达式可以应对多行或单行匹配。

    我使用 Notepad++,它可以做一些你想做的事情,在多个文件(打开或在目录树中)进行搜索/替换,这不是主要目标,但它确实有效。

    困难的部分是定义您的“匹配”,确保您要在哪里挑选出您需要保留的详细信息,并确保您有一个可以在“替换”表达式中使用的适当捕获组。

    所以,再次,是的,它可以提供帮助,但你的问题非常高。

    对于 C# 部分,定义正则表达式后就很简单了。

    static void Main()
    { 
         // Remove everything (by commenting out) everything between HTML
         // and the end of the HEAD tag.
         string matchRegex = "<html[^>]*>(.*?)</head>";
         string replaceExpression = "<html> <!-- \0 </head> -->";
    
         string pattern = "*.html";
    
         using ( DirectoryInfo di = new DirectoryInfo(.) )
         {
              foreach (FileInfo fi in di.GetFiles(pattern))
              {
                   using ( StreamReader sr = fi.OpenText() )
                   {
                        // Going from memory here, may need to use a TextReader...
                        string content = fi.ReadToEnd();
    
                        // Treat as single-line so that the match can span
                        // several lines.
                        string newContent = Regex.Replace(content, 
                                                          matchRegex, 
                                                          replaceExpression,
                                                          RegexOptions.Singleline);
    
                        // Write-out/overwirte your new file here....
                   }
              }
         }
    }
    

    您可能会发现此页面很有用,其中有人正在尝试编写正则表达式来匹配 cmets,然后处理多行 cmets 等。它显示了正则表达式的思考过程。 Finding Comments in source code。替换部分很简单,放入一个捕获组并在替换字符串中引用组/名称!

    【讨论】:

    • 我打算编写一些 C# 代码来循环遍历 html 文件的集合,因此不会为此使用文本编辑器。您是否有示例说明如何执行将匹配多行的 RE?
    • 感谢您的帮助。我编辑了这个问题,因为我没有编码 <和>所以他们被剥夺了,使问题有点模棱两可。我了解如何编写循环,我正在寻找可以匹配多行的正则表达式的示例?
    • 传入 RegexOptions.Multiline 或 RegexOptions.Singleline 以更改 ^ 和 $ 的行为。 Multiline = "更改 ^ 和 $ 的含义,使其分别匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。"
    • 我个人使用单行,这样我就可以进行多行捕获。我只是处理 \r 和 \n 来处理新行。例如。在单行匹配中,查找 "\r\n\r\n" 将搜索空行。像 "[\r\n]{1,2}" 这样的东西可以让它处理 Unix/Windows 行尾。
    • 更新示例以注释掉起始 HTML 和 HEAD 结尾之间的 HTML。
    猜你喜欢
    • 2019-10-04
    • 2012-10-16
    • 2012-08-15
    • 1970-01-01
    • 2011-08-21
    • 2016-08-09
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多