PDA

View Full Version : یک regex برای استخراج کلمات با طول مشخص از داخل متن



sara_aryanfar
سه شنبه 27 تیر 1391, 21:58 عصر
با سلام نیاز به یک regex دارم که کلماتی که طول اونا بین 4 هست رو برام دربیاره اول و آخر کلمه هم اسپیس خورده باشه مثلا " هوایی " همانطور که می بینید در هردوطرف کلمه اسپیس هست و تعداد کاراکترش 4 هست راستی کارکتر های کلمه نباید اسپیس باشن ممنون میشم از دوستانی که با regex گار کردن راهنمایی کنن

Saman_12
سه شنبه 27 تیر 1391, 23:27 عصر
هوایی پنج حرفه!:دی
شما باید از یک نگاه مثبت به عقب برای اسپیس قبل از کلمه و یه نگاه مثبت به جلو برای اسپیس بعد از کلمه استفاده کنید و مابین این ها هم از کارکتر های مورد نظر (در اینجا alphanumeric-[0-9])به تعداد نیاز استفاده کنید:

(?<=\s+)[\w-[0-9_]]{1,4}(?=\s+)

sara_aryanfar
چهارشنبه 28 تیر 1391, 00: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, 08:17 صبح
سلام . می توانم بپرسم دارین چه اسپمری می سازید که نیاز به پیدا کردن لینک هستید ؟ شاید بتونم بهتر به شما کمک نمایم .

sara_aryanfar
چهارشنبه 28 تیر 1391, 09:57 صبح
من لینک نمی خوام پیدا کنم برای جمع آوری لینک مشکلی ندارم و از طرفی فکر نکنم بشه اسمشو اسپمر گذاشت می خوام از داخل یک متن که مثلا هزارتا لغت داره لغات با طول چهار کاراکتر رو پیدا کنه و بفرسته برای مرحله بعد که تشخیص ارتباط لغات با متن هست و غیره

mehdi.mousavi
چهارشنبه 28 تیر 1391, 10: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, 11: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, 18:35 عصر
ممنون از عزیزان آیا برای نوشتن عبارات با قاعده ابزار فارسی هم هست یا فقط همون نرم افزار انگلیسیه ؟