using (StreamReader sr = new StreamReader(@"D:\1.txt")) { string s = sr.ReadToEnd(); //开始字符串 string s1 = textBox1.Text; //结束字符串 string s2 = textBox2.Text; Regex rg = new Regex("(?<=(" + s1 + "))[.\\s\\S]*?(?=(" + s2 + "))", RegexOptions.Multiline | RegexOptions.Singleline); foreach (var m in rg.Matches(s)) { StreamWriter sw = new StreamWriter(@"D:\2.txt", true); sw.WriteLine(m.ToString()); sw.Close(); }
现在是可以把字符串按照要求的格式截断了,但是有一个bug。就是出现s1的但是没有s2来收尾然后又出现s1,这时候把这个s1给忽略了,导致不符合要求的内容出现了。s1xxxs2这之间的东西是我需要的。现在是s1xxxs1xxxs2.现在给我的东西就出现了这样的bug。怎么破呢?
s1xxxs2这之间的东西是我需要的。现在是s1xxxs1xxxs2
那s1xxxs1xxxs2这种情况你要的是什么?xxxs1xxx?
不符合要求的我选择过滤掉。s1xxxs1xxxs2这种情况,我把第一个s1xxx自动掐掉,只要和s2最近的s1之间的内容
@南瓜asp: 正则这么写 试试
Regex rg = new Regex("(?<=(" + s1 + "))[^("+s1+")]*?(?=(" + s2 + "))", RegexOptions.Multiline | RegexOptions.Singleline);
@林J: 你真帅,这个好使!