View Full Version : یک regex برای استخراج کلمات با طول مشخص از داخل متن
sara_aryanfar
سه شنبه 27 تیر 1391, 22:58 عصر
با سلام نیاز به یک regex دارم که کلماتی که طول اونا بین 4 هست رو برام دربیاره اول و آخر کلمه هم اسپیس خورده باشه مثلا " هوایی " همانطور که می بینید در هردوطرف کلمه اسپیس هست و تعداد کاراکترش 4 هست راستی کارکتر های کلمه نباید اسپیس باشن ممنون میشم از دوستانی که با regex گار کردن راهنمایی کنن
Saman_12
چهارشنبه 28 تیر 1391, 00:27 صبح
هوایی پنج حرفه!:دی
شما باید از یک نگاه مثبت به عقب برای اسپیس قبل از کلمه و یه نگاه مثبت به جلو برای اسپیس بعد از کلمه استفاده کنید و مابین این ها هم از کارکتر های مورد نظر (در اینجا alphanumeric-[0-9])به تعداد نیاز استفاده کنید:
(?<=\s+)[\w-[0-9_]]{1,4}(?=\s+)
sara_aryanfar
چهارشنبه 28 تیر 1391, 01:51 صبح
کلمات چهار حرفی رو بر نمی گردونه چرا؟ به صورت زیر برا تست استفاده کردم
private void button1_Click(object sender, EventArgs e)
{
string[] s;
s = textBox1.Text.Split(' ');
foreach (string str in s)
{
Regex linkFinder = new Regex(@"(?<=\s+)[\w-[0-9]]{1,4}(?=\s+)", RegexOptions.IgnoreCase);
foreach (Match match in linkFinder.Matches(str))
{
//Do things...
string url = match.Value;
textBox2.Text += url + "\r\n";
}
}
MessageBox.Show("ok");
}
aradrobo
چهارشنبه 28 تیر 1391, 09:17 صبح
سلام . می توانم بپرسم دارین چه اسپمری می سازید که نیاز به پیدا کردن لینک هستید ؟ شاید بتونم بهتر به شما کمک نمایم .
sara_aryanfar
چهارشنبه 28 تیر 1391, 10:57 صبح
من لینک نمی خوام پیدا کنم برای جمع آوری لینک مشکلی ندارم و از طرفی فکر نکنم بشه اسمشو اسپمر گذاشت می خوام از داخل یک متن که مثلا هزارتا لغت داره لغات با طول چهار کاراکتر رو پیدا کنه و بفرسته برای مرحله بعد که تشخیص ارتباط لغات با متن هست و غیره
mehdi.mousavi
چهارشنبه 28 تیر 1391, 11:58 صبح
سلام.
می تونید بدین شکل عمل کنید:
string input = "this as test ano ther test, give im a try! well";
string pattern = @"(?<=\x20)[\w]{4}(?=\x20)";
List<string> words = Regex.Matches(input, pattern).Cast<Match>().Select(m => m.Value).ToList();
دقت کنید که اینجا، کلمات زیر برنمیگرده:
this
test,
well
چون اولی سمت چپش space نیست،
دومی کاما رو جزء text در نظر گرفته، درنتیجه 5 حرفه
و سومی هم سمت راستش space نیست.
که به نظر میرسه همون چیزی باشه که شما دنبالشید...
موفق باشید.
Saman_12
چهارشنبه 28 تیر 1391, 12:24 عصر
s = textBox1.Text.Split(' ');
در این قسمت شما میاید و کلمات رو بر اساس اسپیس با تابع اسپلیت جدا میکنید پس دیگه اسپیسی وجود نداره که عبارت بخواد اونو تشخیص بده :
Regex finder;
string value;
Int32 i;
finder=new Regex(@"(?<=[\s-[\n]]+)[\w-[0-9]]{4}(?=[\s-[\n]]+)", RegexOptions.IgnoreCase);
value = " abcd زمین efghj a4bc اساسی 1234 راوی ndfh";
i=0;
foreach (Match matchvalue in finder.Matches(value))
{
Console.WriteLine(i.ToString() + " : {0}",matchvalue);
i++;
}
sara_aryanfar
چهارشنبه 28 تیر 1391, 19:35 عصر
ممنون از عزیزان آیا برای نوشتن عبارات با قاعده ابزار فارسی هم هست یا فقط همون نرم افزار انگلیسیه ؟
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.