// -- 需要分析的字符串
Group: 239.252.151.1, (?)
   Source: 58.223.234.1 (?)
     Rate: 153 pps/1691 kbps(1sec), 1687 kbps(last 50 secs), 6 kbps(life avg)
          
Group: 239.252.151.2, (?)
   Source: 58.223.234.3 (?)
     Rate: 152 pps/1686 kbps(1sec), 1687 kbps(last 50 secs), 24 kbps(life avg)
          
Group: 239.252.151.3, (?)
   Source: 58.223.234.4 (?)
     Rate: 152 pps/1686 kbps(1sec), 1688 kbps(last 50 secs), 21 kbps(life avg)
          
Group: 239.252.151.4, (?)
   Source: 58.223.234.5 (?)
     Rate: 152 pps/1686 kbps(1sec), 1688 kbps(last 50 secs), 22 kbps(life avg)
          
Group: 239.252.151.5, (?)
   Source: 58.223.234.6 (?)
     Rate: 152 pps/1686 kbps(1sec), 1689 kbps(last 50 secs), 22 kbps(life avg)
          
Group: 239.252.151.6, (?)
   Source: 58.223.234.3 (?)
     Rate: 152 pps/1686 kbps(1sec), 1689 kbps(last 50 secs), 23 kbps(life avg).......
(后面还有很多,都是类似于这个结构)我现在想提取 Group后面的ip地址,Source后面的ip地址,Rate后面的xxx pps, xxxx kbps,分别放在4个数组里。请问怎么做,谢谢各位

解决方案 »

  1.   

                string strInput = textBox1.Text;            string strPattern = @"Group: (?<Group>.*),";            Regex reg = new Regex(strPattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);
                MatchCollection mc = reg.Matches(strInput);
                foreach(Match m in mc)
                {
                    MessageBox.Show(m.Groups["Group"].Value);
                }            strPattern = @"Source: (?<Source>.*)[ (]";            reg = new Regex(strPattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);
                mc = reg.Matches(strInput);
                foreach (Match m in mc)
                {
                    MessageBox.Show(m.Groups["Source"].Value);
                }            strPattern = @"Rate: (?<Rate>.*),";            reg = new Regex(strPattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);
                mc = reg.Matches(strInput);
                foreach (Match m in mc)
                {
                    MessageBox.Show(m.Groups["Rate"].Value);
                }
      

  2.   

                string[] aa = 需要分析的字符串.Split(new string[]{"Group:"},StringSplitOptions.RemoveEmptyEntries);
                int lenth = aa.Length;
                string[] group = new string[lenth];
                string[] source = new string[lenth];
                string[] ratepps = new string[lenth];
                string[] ratekpps = new string[lenth];
      

  3.   

    下面提取了页面上所有数据存进6个数组里面
      string regstr = @"Group: 239.252.151.1, (?) 
      Source: 58.223.234.1 (?) 
        Rate: 153 pps/1691 kbps(1sec), 1687 kbps(last 50 secs), 6 kbps(life avg) 
              
    Group: 239.252.151.2, (?) 
      Source: 58.223.234.3 (?) 
        Rate: 152 pps/1686 kbps(1sec), 1687 kbps(last 50 secs), 24 kbps(life avg) 
              
    Group: 239.252.151.3, (?) 
      Source: 58.223.234.4 (?) 
        Rate: 152 pps/1686 kbps(1sec), 1688 kbps(last 50 secs), 21 kbps(life avg) 
              
    Group: 239.252.151.4, (?) 
      Source: 58.223.234.5 (?) 
        Rate: 152 pps/1686 kbps(1sec), 1688 kbps(last 50 secs), 22 kbps(life avg) 
              
    Group: 239.252.151.5, (?) 
      Source: 58.223.234.6 (?) 
        Rate: 152 pps/1686 kbps(1sec), 1689 kbps(last 50 secs), 22 kbps(life avg) 
              
    Group: 239.252.151.6, (?) 
      Source: 58.223.234.3 (?) 
        Rate: 152 pps/1686 kbps(1sec), 1689 kbps(last 50 secs), 23 kbps(life avg) 
    ";
            string pattern=@"Group:\s*(?<group>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}),\s*\(\?\)\s*";
             pattern+=@"Source:\s*(?<source>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*\(\?\)\s*";
             pattern += @"Rate:\s*(?<RatePps>\d+)\s*pps\/(?<RateKbpsSec>\d+)\s*kbps\(1sec\),\s*(?<RateKbpsLast>\d+)\s*kbps\(last\s*\d+\s*secs\),\s*(?<RateKbpsLife>\d+)\s*kbps\(life\s*avg\)";
            Regex reg = new Regex(pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.ExplicitCapture);        MatchCollection matches = reg.Matches(regstr);
            int len = matches.Count;
            string[] groupIP = new string[len];
            string[] sourceIP = new string[len];
            string[] RatePps = new string[len];
            string[] RateKbpsSec = new string[len];
            string[] RateKbpsLast = new string[len];
            string[] RateKbpsLife = new string[len];
            int iIndex = 0;
            foreach(Match mat in matches)
            {
                groupIP[iIndex] = mat.Groups["group"].Value;
                sourceIP[iIndex] = mat.Groups["source"].Value;
                RatePps[iIndex] = mat.Groups["RatePps"].Value;
                RateKbpsSec[iIndex] = mat.Groups["RateKbpsSec"].Value;
                RateKbpsLast[iIndex] = mat.Groups["RateKbpsLast"].Value;
                RateKbpsLife[iIndex] = mat.Groups["RateKbpsLife"].Value;            iIndex++;
                Response.Write(mat.Groups["group"].Value + "__" + mat.Groups["source"].Value + "__" + mat.Groups["RatePps"].Value + "__" + mat.Groups["RateKbpsSec"].Value + "__" + mat.Groups["RateKbpsLast"].Value + "__" + mat.Groups["RateKbpsLife"].Value + "<br/>");
            }
      

  4.   

    uweng 回答得好,ZengHD 写得太简单了,如果数据稍微一发生变化就不行了。