有文本格式如下:
...
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分割关键词文档
...
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分割关键词文档
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();
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()); //后半部分
var ary = Regex.Matches(str, @"(?is).+?(?=$|\([^()]+\)[^()]*?T2\s+M06)");
foreach(var t in ary)
Console.WriteLine(t.Value);