有下文本文件,内容如下

不确定行数内容1.abc不确定行数内容2.dsfs
学号|姓名|成绩
001|学生1|91
002|学生2|92
003|学生3|93

要获取其中的内容信息,如下
001|学生1|91
002|学生2|92
003|学生3|93其中,学号|姓名|成绩 这个标题是有的,但不确定从哪一行开始(因为标题上面有不确定行数的内容)
另外,在最后一行,有可能没有换行符\r\n。我想这样写
(.*学号\|姓名\|成绩\r\n)?(?<key>.+?)\r\n
但存在两个问题:
1.学号前面的不确定内容如何写.*好像不行
2.最后的换行符有可能不存在,于是我写
(.*学号\|姓名\|成绩\r\n)?(?<key>.+?)(\r\n)?
可是也不正确。
请问如何写,谢谢!

解决方案 »

  1.   

    @shawn_yang
    那如果正好学号与成绩也是字符串的,那么我需要改成
    (.+)\|(.+)\|(.+)
    这时,会把标题也匹配下去,该怎样处理?谢谢!
      

  2.   

    @shawn_yang
    另外,上面的表达式,假设了列数是固定的。如果是不固定的呢?
      

  3.   

    (?is)(?<=[\s\S]*?(学号\|姓名\|成绩\r\n)?)(\w+)\|(\w+)\|(\w+)(\r\n)?
      

  4.   

    首页你这个得用多行模式(?m)(\d{3, 8})\|([^\|]+)\|(\d{1,3})
    但是也不能排除表头前面的内容包含匹配的内容
    所以最好是一行一行读
    using(var sr = new StreamReader(path))
    {
       bool start = false;
       while((line=sr.ReadLine()) != null)
       {
          if(!start)
          {
              if(line=="学号|姓名|成绩") start = true;
              continue;
          }
          var items = line.Split('|');
          string sn = items[0]...
       }
    }
    不一定非要用正则