聊天记录即正常的qq聊天记录:
2011/9/11 22:33:10 A
[表情] 哎2011/9/11 22:35:12 B
哎什么?痛苦? 2011/9/11 22:35:47 A
没什么啊
因为聊天记录全是2011年的,所以现在用2011(.*\r\n)+?\r\n来匹配
我的思路是:【2011】从2011开始;【.*\r\n】+?然后任意字符+换行任意个,但是非贪婪;【\r\n】因为每次发言都会换行,所以这个匹配结束这样有2个问题,如下:
1,我试了一下少了一部分,不知道少哪了 -。-
2,比如上面的3次发言,匹配第二次时,“\r\n痛苦?\r\n”就匹配不到,因为非贪婪,但是如果贪婪的话会一次匹配多次发言。我正则太菜,基本碰到就跳过因此求教各位正则高手,多谢各位!

解决方案 »

  1.   

                    string str = @"2011/9/11 22:33:10 A
    [表情] 哎2011/9/11 22:35:12 B
    哎什么?痛苦?  2011/9/11 22:35:47 A
    没什么啊";
                    Regex reg = new Regex(@"(?s)2011(?:(?!2011).)*");
                    foreach (Match m in reg.Matches(str))
                    {
                        Console.WriteLine(m.Value);
                        Console.WriteLine("==============");
                    }
      

  2.   

    能否以时间做为每一个发言的开始,并且如果发言内容中有时间的话(就是说copy的ls的发言)这个时间是比当前的时间早的。
    不知道可行否!
      

  3.   


                string str = @"2011/9/11 22:33:10 A
    [表情] 哎2011/9/11 22:35:12 B
    哎什么?痛苦?  2011/9/11 22:35:47 A
    没什么啊";
                Regex reg = new Regex(@"2011/\d{1,2}/\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2}\s+");            string[] result = reg.Split(str);
                foreach (string r in result)
                {
                    Console.WriteLine(r);
                    Console.WriteLine(Environment.NewLine + "======================");
                }
      

  4.   

    感谢各位的答复~
    1L,2L的朋友提供的表达式,都可以实现。我正则菜,没完全看明白 ~。~
    6L的朋友提供的也可以,但是因为是根据时间split,所以每一项没有时间了。3L的朋友想的很周到,这个我没想到办法~
    只能期待聊天记录中没有2011出现了,如果各位有什么好的解决办法,多谢赐教。
      

  5.   

    用某行满足“年/月/日 时间 名字”的格式来判断分割记录比较合理:
    @"(?s:\S.*?)(?=(?m:^20\d{2}/\d{1,2}/\d{1,2} \d{1,2}:\d{1,2}:\d{1,2} .+$)|$)\n?"
      

  6.   


    汗 你又没说要时间,如果要时间的话,稍微改改就可以了                        string str = @"2011/9/11 22:33:10 A
    [表情] 哎2011/9/11 22:35:12 B
    哎什么?痛苦?  2011/9/11 22:35:47 A
    没什么啊";
                Regex reg = new Regex(@"(?=2011/\d{1,2}/\d{1,2}\s+\d{1,2}:\d{1,2}:\d{1,2}\s+)");            string[] result = reg.Split(str);
                foreach (string r in result)
                {
                    Console.WriteLine(r);
                    Console.WriteLine(Environment.NewLine + "======================");
                }