[英]Regex Matching, cascaded tags
嗨我想從下面的標簽中得到結果,我需要實現的是獲得標簽中的第一個匹配,然后是第五個匹配,然后是第九個匹配,所以第一個然后是第五個匹配。 所以我的結果是,注意我意識到這不是解析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
你能幫幫我嗎?
看起來你根本沒有檢查行號。 如果你只是添加一個計數器,那么檢查它的4的mod是否為零,你會好的。
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的編碼系統的工作方式,此代碼可能略有不同。
如下更改它以匹配數字:
<td class="stat">(\d+)<\/td>
如果我讓你正確,您必須首先通過分割字符串months ago
,然后由上述正則表達式匹配的分割操作的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.