当行匹配正则表达式时停止添加到列表 <String> - C#

Stop adding to List<String> when line matches regex - C#

我有一个 StreamReader,它正在从文件中读取行。

    Tyndall Centre grim file created on 22.01.2004 at 17:57 by Dr. Tim Mitchell
.pre = precipitation (mm)
CRU TS 2.1
[Long=-180.00, 180.00] [Lati= -90.00,  90.00] [Grid X,Y= 720, 360]
[Boxes=   67420] [Years=1991-2000] [Multi=    0.1000] [Missing=-999]
Grid-ref=   1, 148
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
Grid-ref=   1, 311
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
Grid-ref=   1, 312
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410

如果某行包含正则表达式模式,如何停止向列表添加行?例如,在我下面的代码中,我有一个包含单词 "Grid" 的正则表达式模式。我想将单词 "Grid" 第一次出现之前的每一行添加到列表中,我想它会在找到单词 "Grid" 后停止向列表中添加项目。所以名为 HeaderParse<> 的列表应该只包含以下行:

    Tyndall Centre grim file created on 22.01.2004 at 17:57 by Dr. Tim Mitchell
.pre = precipitation (mm)
CRU TS 2.1
[Long=-180.00, 180.00] [Lati= -90.00,  90.00] [Grid X,Y= 720, 360]
[Boxes=   67420] [Years=1991-2000] [Multi=    0.1000] [Missing=-999]

这是我使用的代码:

       private void button1_Click(object sender, EventArgs e)
    {

        StreamReader reader = File.OpenText("cru-ts-2-10.1991-2000-cutdown.pre");

        string line;

        var regex = new Regex(@"(Grid)");

        List<String> HeaderParse = new List<string>();

        while ((line = reader.ReadLine()) != null)
        {
            if (!regex.IsMatch(line))
            {
                HeaderParse.Add(line);
            }
            else
            {
 //stop it adding stuff here
            }
        }
        MessageBox.Show("This button has been clicked");
    }
 while ((line = reader.ReadLine()) != null)
    {
        if (!regex.IsMatch(line))
        {
            HeaderParse.Add(line);
        }
        else
        {
          //stop it adding stuff here
          break; 
        }
    }

Break 正是为此而设计的。所以只需添加。

private void button1_Click(object sender, EventArgs e)
{

    StreamReader reader = File.OpenText("cru-ts-2-10.1991-2000-cutdown.pre");

    string line;

    var regex = new Regex(@"(Grid)");

    List<String> HeaderParse = new List<string>();

    while ((line = reader.ReadLine()) != null)
    {
        if (!regex.IsMatch(line))
        {
            HeaderParse.Add(line);
        }
        else
        {
            //stop it adding stuff here
            break;
        }
    }
    MessageBox.Show("This button has been clicked");
}
    private void button1_Click(object sender, EventArgs e)
    {

        StreamReader reader = File.OpenText("cru-ts-2-10.1991-2000-cutdown.pre");

        string line;

        var regex = new Regex(@"(Grid)");

        List<String> HeaderParse = new List<string>();

        while ((line = reader.ReadLine()) != null && !regex.IsMatch(line))
        {
             HeaderParse.Add(line);

        }
        MessageBox.Show("This button has been clicked");
    }