使用正则表达式在文件中查找字符串

时间:2013-05-18 00:36:46

标签: c# regex search find

抱歉我的英语不好,请尽可能帮忙。

  private void button1_Click(object sender, EventArgs e)
            {
                 if (File.Exists(@"data.txt"))
                {
                    System.IO.StreamReader file = new System.IO.StreamReader(@"data.txt");

                     while (file.EndOfStream != true)
                      {
                        string s = file.ReadLine();
                        string s2 = file.ReadLine();
                        string s3 = file.ReadLine();
                        string s4 = file.ReadLine();

                        Match m = Regex.Match(s, "ID\\s");
                        Match m2 = Regex.Match(s2, "Spec\\s");
                        Match m3 = Regex.Match(s3, "Category\\s");
                        Match m4 = Regex.Match(s4, "Price\\s");

                        if (m.Success && m2.Success && m3.Success && m4.Success)
                        {

                             // some code 

                        }
                      }
                }
                if (!File.Exists(@"data.txt")) MessageBox.Show("The file is missing!");
            }

文字文件内容:

ID  560
Spec    This ... bla bla 

blah...
blah...
bla bla 
bla
Category    Other
Price   $259.95 


ID  561
Spec    more blah blah...

blah...
blah...
bla bla 
bla
Category    Other
Price   $229.95

我只是希望在ID之后获取文字,Spec之后的所有内容直到Category。 在这个例子中(上图)我需要:

560  

This ... bla bla 

    blah...
    blah...
    bla bla 
    bla


561

more blah blah...

    blah...
    blah...
    bla bla 
    bla

依此类推,直到文件结束。

1 个答案:

答案 0 :(得分:0)

我解析了很多像这样的文件。使用文本阅读器将数据读入下面的Ienumerable中。这不是工作代码,而是为您提供概念。它应该让你朝着正确的方向前进。

 TextReader reader = new StreamReader(path);
 IEnumerable<string> data = this.ReadLines(reader);  

 foreach (var s in data){
     // make sure its not null doesn't start with an empty line or something.
     if (s != null && !string.IsNullOrEmpty(s) && !s.StartsWith("  ") && s.Length > 0){
        s = s.ToLower().Trim();

        // use regex to find some key in your case the "ID".
        // look into regex and word boundry find only lines with ID
        // double check the below regex below going off memory. \B is for boundry
        var regex = new Regex("\BID\B");
        var isMatch = regex.Match(s.ToLower());
        if(isMatch.Success){ 
           // split the spaces out of the line.
           var arr = s.split(' ');
           var id = arr[1]; // should be second obj in array.

        }

     }
 }

这是我在实际项目中使用的一个解析文件,它解决了这种类型的文本文件。它使用xml文件进行模板化,以便该文件可用于各种文件。但是它会让你知道什么是可能的,或者可能有一些其他想法可以提供帮助。 parse.cs