سلام، اول اینکه از عبارات با قاعده برای HTML استفاده نمیکنن.
شما میتونید از کتابخانه HtmlAgilityPack که مخصوص HTML هست و توی تمامی نسخه های دات نت موجود هست استفاده کنید.
یه روش دیگه ای هم هست که من به جای استفاده از روش بالا ازش استفاده می کنم، این هست: از طریق Split و IndexOf و Substring کردن هست که همینو میگم:
خب به کار نمیاد که فقط تعداد پست تنها رو گرفت، باید نام کاربری رو هم گرفت!
خب یک کلاس به اسم User ایجاد میکنیم:
public class User
{
public string Name { get; set; }
public string PostCount { get; set; }
}
خب شما باید کمی از Html سر در بیارید تا بفهمید من چیکار کردم، من خودم هر جاش نیاز دیدم، براتون کامنت نوشتم:
// aval inke " ro ba ' replace mikonim chon sade tar mishe karemon
html = html.Replace(""", "'");
// bayad <div class='userinfo'> ro split konim
// in code html bala ro man az html hamin safhe ei ke post dadi dar avordam
// in tag marbot be usere karbarie
// tamame etelaati ke az user mishe gereft dakhele hamin tag hast
// pas niaz darim hamin ro split konim, injori kole kasaei ke tuye safhe
// post gozashtan ro migirim
var splitedList = new List<string>(html.Split(new string[]
{
"<div class='userinfo'"
}, StringSplitOptions.RemoveEmptyEntries));
// chon injori split miad ye bar az meghdare 0 ta ghabl az
// <div class='userinfo'> ro migire, ma be item e sefrom niazi nadarim
// oas pakesh mikonim
if (splitedList.Count > 0)
splitedList.RemoveAt(0);
// ye listi az classi ke eijad kardim dorost mikonim
// chon maghadire be dast omade ro mikhaim be sorate list dashte bashim
// chon nemidonim chandta user hast!
var List = new List<User>();
foreach(var item in splitedList)
{
string name = string.Empty, count = string.Empty;
//<a class='username offline popupctrl' href='member.php?377161-mahdishahidi' title='mahdishahidi آفلاین است' id='yui-gen19'><strong>mahdishahidi</strong></a>
if (item.Contains("href='"))
{
// vase substring kardan niaz hast ye start Tag dashte bashim,
// ye done ham end tag, yani yeki az jaei ke mikhaim shoro beshe
// yeki ham ta jaei ke mikhaim tamom she
var start = "href='";
var end = "'";
// miaim item ro az href=' + lengthesh mishe tedade karakterhaye
// href=' ke mishe 6 karakter migirim
name = item.Substring(item.IndexOf(start) + start.Length);
// hala az karaktere sefrom ta ' ro migirim, inja chon niazi
// be khode ' nadarim, dige +1 ya + end.Length ro neminevisim
name = name.Substring(0, name.IndexOf(end));
// alan user ro in shekli migire, ama ma faghat esme taraf ro
// mikhaim, pas bayad dobare substring konim
// alan chon ta inja ro nemikhaim=> member.php?377161-
// miaim az karaktere - be bad ro migirim
//member.php?377161-mahdishahidi
name = name.Substring(name.IndexOf("-") + 1);
// chon html mamolan encode mishan, ma niaz hast oun ro decode
// konim, (escape va unescape ham be in kar migan)
name = System.Net.WebUtility.HtmlDecode(name);
}
//<dt>پست</dt> <dd>30</dd>
if (item.Contains("<dt>پست"))
{
// inja ham hamon tozihate bala
var start = "<dt>پست";
var end = "</dd>";
count = item.Substring(item.IndexOf(start) + start.Length);
count = count.Substring(0, count.IndexOf(end));
//<dd>30
start = "<dd>";
count = count.Substring(count.IndexOf(start) + start.Length);
count = System.Net.WebUtility.HtmlDecode(count);
}
// age name va count khaali ya null nabodan
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(count))
{
// age dakhele listemon esmi ba esmi ke alan gereftim barabar nabod
// badesh etelaat jadid ro be list ezafe mikonim
// methode Any ye extension method hast vase inke biad barat
// bayad fazaye nami zir ro benevisi:
// using System.Linq;
if (!List.Any(u => u.Name.ToString() == name))
{
// be list etelaat ro add mikonim
List.Add(new User
{
Name = name,
PostCount = count
});
}
}
}
// inam tarighe estefade
foreach (var item in List)
richTextBox1.Text += item.Name + "\t" + item.PostCount + "\r\n";
و اینطوری نمایش میده:
mahdishahidi 30MMR_1234 132
danialafshari 2,418
Hadi-Hashemi 151
موفق باشید.