PDA

View Full Version : استخراج یک متن کوتاه از یک رشته



sara_aryanfar
دوشنبه 04 مهر 1390, 20:04 عصر
با سلام دوستان من رشته ای دارم که داخلش می خواهم این عبارت رو که به دفعات تکرار شده استخراج کنم
<div class="sharelik_layer" id="sharelik_layer_13170550144e80aa26d4d54"></div>

البته این قسمت رو sharelik_layer_13170550144e80aa26d4d54 با چه عبارت با قاعده ای می تونم اینو استخراج کنم دو عبارت اول ثابت هستند اما عبارت سوم کاملا متفاوت و ترکیبی از حروف و اعداد هست

ACorvinus
دوشنبه 04 مهر 1390, 20:19 عصر
سلام.

یه سوال. طول عبارت سوم شما همیشه ثابت هستش؟!

ACorvinus
دوشنبه 04 مهر 1390, 21:18 عصر
بازم سلام. اگه طول بخش سوم رشته های شما همیشه 23 کاراکتر باشه با این تکه کد میتونی اونارو جدا کنی:


string str = "Kamransharelik_layer_13170550144e80aa26d4d54Mohamm adAlisharelik_layer_514td9853da21458qa7426oRimaElJ avisharelik_layer_8564uu81qh9613ttv457000RamnoUniv asharelik_layer_8889Trq1230eeqz410ii93qHsahimn";
List<string> lst = new List<string>();
string ConstStr = "sharelik_layer_";
int ThirdPartLength = 23;
while (str.Contains(ConstStr))
{
string result = str.Substring(str.IndexOf(ConstStr), ConstStr.Length + ThirdPartLength);
lst.Add(result);
string sec1 = str.Substring(0, str.IndexOf(result));
string sec2 = str.Substring(sec1.Length + result.Length);
str = sec1 + "###Replace###" + sec2;
}
foreach (string itm in lst)
{
Console.WriteLine(itm);
}
Console.ReadKey();


موفق باشی.

sara_aryanfar
دوشنبه 04 مهر 1390, 22:10 عصر
من می خوام این کار رو با یک pattern انجام بدم

ACorvinus
دوشنبه 04 مهر 1390, 23:03 عصر
سلام.

خب Pattern که دیگه کاری نداره.


string str = "Kamransharelik_layer_13170550144e80aa26d4d54Mohamm adAlisharelik_layer_514td9853da21458qa7426oRimaElJ avisharelik_layer_8564uu81qh9613ttv457000RamnoUniv asharelik_layer_8889Trq1230eeqz410ii93qHsahimn";
List<string> lst = new List<string>();
MatchCollection Matches = Regex.Matches(str, @"sharelik_layer_.......................");
foreach(Match match in Matches)
foreach (Capture capture in match.Captures)
{
lst.Add(capture.Value);
}


تعداد نقطه ها به تعداد کاراکترهای بخش سوم رشته شما هستن. موفق باشی.

nunegandom
دوشنبه 04 مهر 1390, 23:48 عصر
یه توضیح درباره متودهای استفاده شده بدید ممنون میشم
مخصوصا Matches - Capture
ممنون

sara_aryanfar
دوشنبه 04 مهر 1390, 23:58 عصر
با تشکر کدی که من نوشتم به صورت زیر هست و مشکلی نداره که تعداد کاراکتری آخری زیاد و کم بشه

Regex id = new Regex(@"sharelik_layer_\w*", RegexOptions.IgnoreCase);
در هر حال کار من راه افتاد ممنون

ACorvinus
سه شنبه 05 مهر 1390, 08:07 صبح
سلام دوست عزیز.

من یه Reference به شما میدم یه نگاهی بهش بندازین.
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.capture.aspx

در ضمن اگه بخواین اطلاعات زیادی در مورد RegularExpressionها کسب کنین به بسته های آموزشی مایکروسافت یه نگاهی بندازین.
من کتاب 536-70 فصل 3 رو پیشنهاد میدم.

ACorvinus
سه شنبه 05 مهر 1390, 08:10 صبح
با تشکر کدی که من نوشتم به صورت زیر هست و مشکلی نداره که تعداد کاراکتری آخری زیاد و کم بشه

Regex id = new Regex(@"sharelik_layer_\w*", RegexOptions.IgnoreCase);
در هر حال کار من راه افتاد ممنون


سلام.
فکر کنم شما اصلا به مثالی که من گفتم توجه نکردین.

اگه توجه می کردین متوجه اختلاف خیلی خیلی خیلی خیلی کوچیک بین Pattern بنده با Pattern خودتون میشدین.
موفق باشین.