2009-11-06 68 views
0

我有一组html文件,我想通过替换页眉和页脚进行修改。每个文件的内容是不同的,我想使用一个正则表达式(或类似如果RE不能处理多行查询)。如何使用标准页眉和页脚修改/更新一组html文件

作为一个例子,一个修改我要提出的是,<HTML>并与一个标准的头< /头>之间更换的一切。

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

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

回答

0

那么简单的答案是,是的。

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

我用记事本+ +,可以你想要做一个搜索/多个文件(打开或目录树中)更换什么样的事,不是它的主要目的,但它的作品。

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

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

对于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.... 
       } 
      } 
    } 
} 

你会发现这个页面是有用的,在里面,有人试图写一个正则表达式匹配的意见,然后处理多行注释等,这显示了正则表达式的思维过程。 Finding Comments in source code。替换部分很简单,将一个捕获组放入并在替换字符串中引用组/名称!

+0

我打算编写一些C#代码来循环浏览html文件的集合,所以不会为此使用文本编辑器。你有没有一个例子说明你如何执行一个可以匹配多行的RE? – NickGPS 2009-11-06 11:39:26

+0

感谢您的帮助。我编辑了这个问题,因为我没有编码<和>,所以他们被剥离出来,这使得问题有点模糊。 我知道如何编写一个循环,我在寻找的是一个可以匹配多行的正则表达式的例子吗? – NickGPS 2009-11-06 11:45:19

+1

传入RegexOptions.Multiline或RegexOptions.Singleline以更改^和$的行为。 Multiline =“更改^和$的含义,以便它们分别匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。” – 2009-11-06 13:53:10