正则表达式匹配,级联标签

时间:2012-04-18 22:55:21

标签: c# regex windows-phone-7

您好我正在尝试从下面的标签中获得结果,我需要实现的是获得标签中的第一个匹配,然后是第五个匹配,然后是第九个匹配,所以第一个匹配,然后是第五个匹配。所以我的结果是,注意我意识到这不是解析HTML的最好方法,但我真的只需要它

我正在使用的正则表达式是

<td class="stat">(.*?)<\/td>

我正在使用的代码是

private static ObservableCollection<Top> top = new ObservableCollection<Top>();

public void twit_topusers_DownloadStringCompleted(Object sender, DownloadStringCompletedEventArgs e)
    {
            string str;
            // Size the control to fill the form with a margin
            str = (string)e.Result;




            Regex r = new Regex("<td class=\"stat\">(.*?)</td>");
            // Find a single match in the string.
            Match m = r.Match(str);





            while (m.Success)
            {

                testMatch = "";

                //
                testMatch += System.Text.RegularExpressions.Regex.Unescape(m.Groups[0].ToString()).Trim();



                top.Add(new Top(testMatch));
                m = m.NextMatch();

            }

            listBox.ItemsSource = top;


    }



    }

标签是

<td class="stat">14307149</td>//FIRST
<td class="stat">679761</td>
<td class="stat">3508</td>
<td class="stat">62 months ago</td>
<td class="stat">1430700</td>//FIFTH
<td class="stat">679761</td>
<td class="stat">3508</td>
<td class="stat">72 months ago</td>
<td class="stat">1430600</td>//NINTH
<td class="stat">679761</td>
<td class="stat">3508</td>
<td class="stat">82 months ago</td>

但我得到的结果是

  

比赛1 14307149

     

比赛2 679761

     

比赛3 3508

     

比赛4 62个月前

     

比赛5 1430700

     

第6场比赛679761

     

比赛7 3508

     

比赛8 72个月前

     

比赛9 14307149

     

比赛10 679761

     

比赛11 3508

     

比赛12 62个月前

我需要的结果是

  

比赛1 14307149

     

比赛2 1430700

     

比赛3 1430600

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

看起来你根本没有检查行号。如果你只是添加一个计数器,那么检查它的mod为4是否为零,你会好的。

counter = 0;
while (m.Success)
{
        if( counter % 4 == 0 )
        {
            testMatch = "";

            //
            testMatch += System.Text.RegularExpressions.Regex.Unescape(m.Groups[0].ToString()).Trim();



            top.Add(new Top(testMatch));
            m = m.NextMatch();

        }
        counter++;
}

注意:我不是WP7开发人员,因此根据WP7编码系统的工作方式,此代码可能略有偏差。

答案 1 :(得分:0)

按如下方式更改以仅匹配数字:

     <td class="stat">(\d+)<\/td>

如果我弄错了你必须首先将字符串拆分为months ago,然后通过上述正则表达式匹配拆分操作的结果。