日期:2014-05-17  浏览次数:20531 次

高分求解正则提取监听日志内容
下面是监听的日志,我准备把它导到数据库里

2013/06/08 周六 
15:36
  TCP    11.14.3.10:3389    11.19.136.16:29119  ESTABLISHED
  TCP    11.14.3.10:3389    12.19.111.2:1196    ESTABLISHED
  TCP    11.14.3.10:3389    18.87.77.7:60100     ESTABLISHED

用正则提取成这种格式
日期               IP            端口号
2013/06/08 15:36   11.19.136.16 29119  
2013/06/08 15:36   12.19.111.2 1196
2013/06/08 15:36   18.87.77.7 60100     
正则?

------解决方案--------------------
你这用正则,还不如自己一行行判断呢,先看开头是否符合日期格式,然后读取,下一行取时间,在后面取ip,直到下一个日期出现,以此循环
------解决方案--------------------
string tempStr = File.ReadAllText(@"C:\Users\myx\Desktop\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt




                var _list = Regex.Matches(tempStr, @"(?i)(?<=(?<Date>\d{4}[/-]\d{1,2}[/-]\d{1,2})[^\d]*?(?<Time>\d+[::]\d+)(?:(?!\d{4}[/-])[\s\S]*?))\d+?\.\d+?\.\d+?\.\d+?(?:[:]\d+)\s+?(?<IP>\d+?\.\d+?\.\d+?\.\d+)[:]?(?<Num>\d+)?").Cast<Match>().Select(a => new
                { 
                DateTime=a.Groups["Date"].Value+" "+a.Groups["Time"].Value,
                IP=a.Groups["IP"].Value,
                Num=a.Groups["Num"].Value
                }).ToList();
                /*
                 * + [0] { DateTime = "2013/06/08 15:36", IP = "11.19.136.16", Num = "29119" } <Anonymous Type>
                    + [1] { DateTime = "2013/06/08 15:36", IP = "12.19.111.2", Num = "1196" } <Anonymous Type>
                    + [2] { DateTime = "2013/06/08 15:36", IP = "18.87.77.7", Num = "60100" } <Anonymous Type>

                 */

------解决方案--------------------