正则表达式-匹配txt中的特定字符串

    最近由于工作需要,学习了一些关于正则表达式方面的知识,主要是关于如何用C#去log文件中(txt格式)搜索匹配想要的信息,在这里把自己写的一些东西记录一下。我主要是要匹配log中包含的一些信息:

BEGIN RUN:  7/12/2011, 12:56:58 PM

   ... ...

         Passed Tests:          7
         Failed Tests:          2
  ... ...

         Ignored Verifications: 0
         Total Execution Time:  9m 11s

  ... ...

具体方法如下:

 public static void GetInfo(string logPath,out String[] value) //logpath是存放log的路径, value是获取到相应的字符串后将其输出
        {
            value=new string[5]; //我需要匹配搜索的字符串有5个
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))  //打开log文件
            {
                using (StreamReader sr = new StreamReader(fs))
                {
                    string[] lineArray = sr.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); //存储log一共有多少行

                    // Define regex to search info from .log
                    Regex rx1 = new Regex(@".?(\d{1,2}/\d{1,2}/\d{4}, \d{1,2}:\d{1,2}:\d{1,2} \wM)", RegexOptions.IgnoreCase); //为了搜索匹配BEGIN RUN: 7/12/2011, 12:56:58 PM 这个字符串中的时间7/12/2011, 12:56:58 PM
                    Regex rx2 = new Regex(@"Passed Tests:\s+\d{1,3}", RegexOptions.IgnoreCase); //为了搜索匹配Passed Tests: 7这个字符串中的数字
                    Regex rx3 = new Regex(@"Failed Tests:\s+\d{1,3}", RegexOptions.IgnoreCase); //为了搜索匹配 Failed Tests: 2这个字符串中的数字
                    Regex rx4 = new Regex(@"Ignored Verifications:\s+\d{1,3}", RegexOptions.IgnoreCase); //为了搜索匹配 Ignored Verifications: 0这个字符串中的数字
                    Regex rx5 = new Regex(@"Total Execution Time:\s+\d{1,2}m+ \d{1,2}s|Total Execution Time:\s+\d{1,2}m", RegexOptions.IgnoreCase); //为了搜索匹配 Total Execution Time: 9m 11s这个字符串中的时间

                    foreach (string line in lineArray) //逐行进行遍历
                    {
                        if (rx1.Match(line).Success) //如果找到符合rx1条件的字符串
                        {
                            val[0] = rx1.Match(line).Value; //把字符串的值赋给value

                        }
                        if (rx2.Match(line).Success)
                        {
                            val[1] = rx2.Match(line).Value.Substring(17); //从第一个字母p开始算起7的index是17(包括了空格)
                        }
                        if (rx3.Match(line).Success)
                        {
                            val[2] = rx3.Match(line).Value.Substring(17);
                        }
                        if (rx4.Match(line).Success)
                        {
                            val[3] = rx4.Match(line).Value.Substring(23);
                        }
                        if (rx5.Match(line).Success)
                        {
                            val[4] = rx5.Match(line).Value.Substring(23);
                        }                   
                    }
                }
            }
        }

由于很多文章都只介绍了一些常用的正则,像邮编,电话之类的,所以在这里把我自己遇到的一个具体的例子记录下,怎么去做全文匹配,查找字符串,传值,供自己学习用。

posted on 2011-08-17 17:34  halia  阅读(3545)  评论(0编辑  收藏  举报