有文本格式如下:
 ...
 G00 Z20.0
(此处可能还有一个括号)
 M05 
 M09 
 (D=6.0 R=0.0)
 G91 G28 Z0 
 T2 M06

 G80 G17 G40 G49 
 G90 G54 G00 X0 Y0 
 ...想要实现将该文本根据“T2 M06”分割成两个文档:
 ...
 G00 Z20.0
(此处可能还有一个括号)
 M05 
 M09
 
 和 (D=6.0 R=0.0)
 G91 G28 Z0 
 T2 M06
 G80 G17 G40 G49 
 G90 G54 G00 X0 Y0 
 ...问题是“T2 M06”之前还有两行(从括号那一行开始,括号内的内容属于解释文本,属于被分割后的第二个文档) 请问怎么才能实现以关键词之前的一个括号为分界点进行文档分割?ReadLine分割关键词文档

解决方案 »

  1.   


                string str = File.ReadAllText("D:\\1.txt", Encoding.Default);
                var ary = Regex.Matches(str, @"(?is).+?(?=$|\([^()]+\)[^()]*?T2\s+M06)").OfType<Match>().Select(t => t.Value).ToArray();
               
      

  2.   

          System.IO.StreamReader sr = new System.IO.StreamReader("c:\\A.txt", System.Text.Encoding.Default);
            System.Text.StringBuilder sbPrev = new System.Text.StringBuilder();  //前半部分
            System.Text.StringBuilder sbNext = new System.Text.StringBuilder();  //后半部分        string strLine = sr.ReadLine();
            bool bNextStart = false;
            while (strLine != null)
            {
                if (strLine.IndexOf("(") >= 0 && strLine.IndexOf(")") > strLine.IndexOf("(")) //含有(...)
                    bNextStart=true;            if(!bNextStart) //属于前半部分
                    sbPrev.Append(strLine);
                else
                    sbNext.Append(strLine);
            }
            sr.Close();        Console.WriteLine(sbPrev.ToString()); //前半部分
            Console.WriteLine(sbNext.ToString()); //后半部分
      

  3.   

    错误 1 “System.Text.RegularExpressions.MatchCollection”不包含“OfType”的定义,并且找不到可接受类型为“System.Text.RegularExpressions.MatchCollection”的第一个参数的扩展方法“OfType”(是否缺少 using 指令或程序集引用?) E:\360云盘\工程\凯博产品\NC文件分割\NC文件分割\Form1.cs 238 98 NC文件分割 哥 这个怎么解决
      

  4.   

    版本太低了吧?
    var ary = Regex.Matches(str, @"(?is).+?(?=$|\([^()]+\)[^()]*?T2\s+M06)");
    foreach(var t in ary)
    Console.WriteLine(t.Value);