نمایش نتایج 1 تا 11 از 11

نام تاپیک: مشکل در MatchCollection

  1. #1

    مشکل در MatchCollection

    با سلام
    میشه بهم بگید دستور پایین چه رشته هایی رو برای من پیدا می کنه.
    در ضمن یک رشته دیگه دارم که میخوام براش همچین توالی بنویسم.
    میشه بهم بگید چطور می تونم براش دنباله بنویسم؟
    یه لینک آموزشی که برای نوشتنش بتونم ازش استفاده کنم
    MatchCollection MC = Regex.Matches(Text, ">\\w+?\\|(\\w+?)\\|(.+?)\n+([ACGT\n]+)");
    فایل های ضمیمه فایل های ضمیمه

  2. #2

    نقل قول: مشکل در MatchCollection

    میشه بهم برای نوشتن عبارات باقاعده بهم کمک کنید

  3. #3

    نقل قول: مشکل در MatchCollection

    نقل قول نوشته شده توسط minaalamshahi مشاهده تاپیک
    میشه بهم برای نوشتن عبارات باقاعده بهم کمک کنید

    لطفا بیشتر توضیح بدین. دقیقا میخواید چیکار کنید؟
    چند نمونه متن قرار بدین و توضیح بدین عبارت با قاعده برای چه قسمت هایی لازم دارین (چه قسمت هایی از متن باید انتخاب بشه)؟

  4. #4

    نقل قول: مشکل در MatchCollection

    ببینید ورودی من حالتهای مختلفی می تونه داشته باشه که
    1- یه قسمت داده که معمولا عدد هست یا تلفیق عدد و حروف id رکورد داده هست و من رنگی کردم اونها رو-اطلاعات بین سه | | | تای اولی را بردارید که معمولا کد و اسم ژنها ر-(چندین رکورد در یک فایل تکرار میشه) که اصولا با یه کاراکتر جدا کننده مثلا | جدا میشه
    2- یه قسمتش یه سری متن انگلیسیه که اون توضیحاته
    و3- یه قسمت که تکرار 4 حرف acgt هستش ،اصل داده منه
    اما همون جور که گفتم چند نوع فرمت مختلف داره که میخوام نوشتنشون رو یاد بگیرم
    مثلا یکیش همون فایلی هست که بالا گذاشتم
    یکی دیگه اش

    >gi|208436385|gb|FJ217161.1| Bundibugyo ebolavirus, complete genome
    CGGACACACAAAAAGAATG



    >A/California/VRDL92/2009|CY063107|4|HA|A|H1N1|10/17/2009|09_10|USA|Human|Y|AdmantaneResistance_Yes|Ose ltamivirResistance_No|IncreasedVirulence_No|Enhanc edTransmission_Yes|T92E_No|No
    ATGAAGGCAATACTAGTAGTTC
    داخل هر فایل هم چند تا از اینها میتونه باشه که وقتی به علامت < رسید یعنی یه رکورد دیگه شروع شده
    >CY080801
    ATGAAAGTAAAACTACTGGTCCTGTTA


    انواع دیگه ای هم داره، که من باید همشون رو پیش بینی کنم
    اگه میشه بهم یاد بدید چطوری باید بنویسمشون
    خیلی ممنون که به سوالم توجه کردید
    آخرین ویرایش به وسیله minaalamshahi : چهارشنبه 10 تیر 1394 در 11:33 صبح

  5. #5

    نقل قول: مشکل در MatchCollection

    از توضیحات شما اینجور فهمیدم که شما قصد دارین اون قسمت های قرمز رنگ انتخاب کنید (که خودتون گفتین آیدی هستند). برای انتخاب این قسمت از متن علاوه بر این که باید با اصول عبارات با قاعده آشنا باشید باید با مفهوم گروه بندی هم آشنا باشید.

    سعی میکنم در جواب سوال شما یه توضیح کوتاه راجع بشون بدم.
    اول بگم که جواب سوال شما این کد زیر هستش که دو تا عبارت بالایی که تو پستتون بود به عنوان ورودی دادمش.
    عبارت سوم ندادم چون گفته بودین آیدی باید حرف باشه یا عدد ولی سومی اینطور نبود. با این حال با توضیحاتی که می دم میتونید هر الگویی خواستید خودتون بسازید:

    			Regex rx = new Regex (@">(?:\w|\d|_|\/)+\|((?:\w|\d)+)\|");			string text = @">gi|208436385|gb|FJ217161.1| Bundibugyo ebolavirus, complete genomeCGGACACACAAAAAGAATG>A/California/VRDL92/2009|CY063107|4|HA|A|H1N1|10/17/2009|09_10|USA|Human|Y|AdmantaneResistance_Yes|Ose ltamivirResistance_No|IncreasedVirulence_No|Enhanc edTransmission_Yes|T92E_No|NoATGAAGGCAATACTAGTAGTT  C";
    foreach (Match m in rx.Matches(text))
    {
    Console.WriteLine (m.Groups [1].Value);
    }


    که خروجی اون به این شکله:

    Capture.JPG

    حالا چطوری این عبارت با قاعده نوشته شده؟
    اول بگم که شما برای بدست آوردن این عبارت میتونید از سایت Regexr استفاده کنید که کارتون خیلی راحت میکنه.
    چند تا علامتی که من استفاده کردم کوتاه توضیح میدم. ضمنا تو همین سایتی Regexr تمامی این توضیحات کامل تر و با مثال هست. از منوی سمت چپ سایت قسمت Reference انتخاب کنید میبینید که خیلی توضیحات کامل تری قرار داده شده.

    توضیح عبارت
    مشخص کننده حرف. \w
    مشخص کننده عدد. \d
    مشخص کننده کاراکتر "/" \/
    مشخص کننده کاراکتر "|" \|
    مشخص کننده تعداد یکی یا بیشتر برای عبارت قبل از خودش هست. +
    شرط OR که بین عبارت قبل و بعد از آن قرار میگیره |
    برای گروه بندی استفاده میشه و عبارت داخل اون یک گروه هست. ()
    هر کاراکتری غیر از عبارات قاعده دار به منزله خود اون کاراکتر هست. کاراکتر

    با استفاده از این چند تا عبارت ساده میتونیم قسمتی از متن مورد نظر شما انتخاب کنیم. به مثال زیر توجه کنید:

    نتیجه عبارت
    مشخص کننده عباراتی که شامل حرف و عدد و کاراکتر "_" و کاراکتر "/" باشه. (\w | \d | _ | \/) +
    عباراتی که با کاراکتر "|" شروع بشه و پایان پیدا کنه و بین این دو کاراکتر عبارتی شامل حرف و عدد باشه. \| (\w | \d)+ \|

    نتیجه ترکیب دو عبارت بالایی و اضافه کردن کاراکتر "<" به اول اون، میشه از اول هر رکورد تا آخرین کاراکتر آیدی انتخاب کرد:
    >(\w|\d|_|\/)+\|(\w|\d)+\|


    لینک نتیجه این الگو



    ولی همین طوری که در سوال شما مطرح شد، فقط قسمت آیدی لازم هستش و اول رکورد بی استفاده است.
    که برای حل این مشکل از گروه بندی ها استفاده میشه.
    همینطور که قبلا هم گفتم از پرانتز ها برای گروه بندی استفاده میشه و دسترسی به این گروه ها به صورت ترتیبی هست.
    به عنوان مثال در عبارت بالایی سه تا گروه داریم یکی کل عبارت هست، دوم پرانتز اول "(\w|\d|_|\/)" و سومین گروه پرانتز دوم هست "(\w|\d)"
    یه نکته اینجا هست که باید توجه کنید، این که اگه چند تا پرانتز داخل هم داشتیم اول پرانتز کلی، گروه حساب میشه و بعدش پرانتز های داخلی.
    برای بدست آوردن نتیجه نهایی کافیه یک گروه بندی مناسب داشته باشیم که میتونید تو عبارت زیر ببینید:
    >(\w|\d|_|\/)+\|((\w|\d)+)\|

    در این عبارت گروه اول، پرانتز اول هست که کاراکتر آخر قبل از آیدی برمیگردونه.
    گروه دوم آیدی مورد نظر ما هست که این عبارت هست :
    ((\w|\d)+)

    و گروه سوم مشخص کننده آخرین کاراکتر آیدی هست که پرانتز داخل پرانتز قبلی مشخص کننده اون هستش.

    تا اینجا میتونیم به آیدی که مد نظر شماست دسترسی پیدا کنیم که کدی که اول پست گذاشتم کاملا گویا هست.
    ولی یه نکته که میتونیم از اون استفاده کنیم این هستش که ما میتونیم گروه هایی تعریف کنیم که تو شمارش گروه ها حساب نشند که با استفاده از این عبارت قابل انجام هست:
    (?: )


    این کار به ما کمک میکنه که شمارش گروه ها برامون خیلی راحت تر بشه.
    البته تکنیک های دیگه برای گروه بندی وجود داره که توضیح اون ها از حوصله این پست خارج هستش ولی شما میتونید تو اینترنت سرچ کنید و توضیحات قابل توجهی پیدا کنید.

    الگوی نهایی

    لینک هایی که دادم، عبارات پیدا شده به رنگ آبی نشون میده که با نگه داشتن موس روی اون ها شماره گروه ها و عبارات انتخاب شده در اون گروه نمایش میده.

    اگه سوالی در این مورد داشتین در خدمتم.

  6. #6

    نقل قول: مشکل در MatchCollection

    نقل قول نوشته شده توسط minaalamshahi مشاهده تاپیک
    ببینید ورودی من حالتهای مختلفی می تونه داشته باشه که
    1- یه قسمت داده که معمولا عدد هست یا تلفیق عدد و حروف id رکورد داده هست و من رنگی کردم اونها رو-اطلاعات بین سه | | | تای اولی را بردارید که معمولا کد و اسم ژنها ر-(چندین رکورد در یک فایل تکرار میشه) که اصولا با یه کاراکتر جدا کننده مثلا | جدا میشه
    2- یه قسمتش یه سری متن انگلیسیه که اون توضیحاته
    و3- یه قسمت که تکرار 4 حرف acgt هستش ،اصل داده منه
    اما همون جور که گفتم چند نوع فرمت مختلف داره که میخوام نوشتنشون رو یاد بگیرم
    مثلا یکیش همون فایلی هست که بالا گذاشتم
    یکی دیگه اش

    >gi|208436385|gb|FJ217161.1| Bundibugyo ebolavirus, complete genome
    CGGACACACAAAAAGAATG



    >A/California/VRDL92/2009|CY063107|4|HA|A|H1N1|10/17/2009|09_10|USA|Human|Y|AdmantaneResistance_Yes|Ose ltamivirResistance_No|IncreasedVirulence_No|Enhanc edTransmission_Yes|T92E_No|No
    ATGAAGGCAATACTAGTAGTTC
    داخل هر فایل هم چند تا از اینها میتونه باشه که وقتی به علامت < رسید یعنی یه رکورد دیگه شروع شده
    >CY080801
    ATGAAAGTAAAACTACTGGTCCTGTTA


    انواع دیگه ای هم داره، که من باید همشون رو پیش بینی کنم
    اگه میشه بهم یاد بدید چطوری باید بنویسمشون
    خیلی ممنون که به سوالم توجه کردید

    شما پستتون ویرایش کردین!!!!
    جوابی که به شما دادم مال قبل از ویرایش بود!!!!!
    در کل بگم که این متنی که شما انتخاب کردین هیچ قانون خاصی نداره یا حداقل من نمیتونم قانونش بفهمم.
    شما اول باید یه قانون کلی برای انتخاب متنتون پیدا کنید و بعد به دنبال یک عبارت با قاعده باشید.
    از توضیحات پست قبلی من میتونید استفاده کنید و کل یک رکورد انتخاب کنید و در رکورد انتخاب شده به دنبال آیدی مورد نظر باشد ولی همین طور که گفتم باید یک قاعده ای برای این کار وجود داشته باشه.

  7. #7

    نقل قول: مشکل در MatchCollection

    نقل قول نوشته شده توسط CrafteR مشاهده تاپیک
    ا

    ولی یه نکته که میتونیم از اون استفاده کنیم این هستش که ما میتونیم گروه هایی تعریف کنیم که تو شمارش گروه ها حساب نشند که با استفاده از این عبارت قابل انجام هست:
    (?: )


    این کار به ما کمک میکنه که شمارش گروه ها برامون خیلی راحت تر بشه.
    ا
    .
    اول ممنون که وقت گذاشتید
    بله پستم رو ویرایش کردم
    اگر امکانش هست این قسمت رو بیشتر برام توضیح بدید

  8. #8

    نقل قول: مشکل در MatchCollection

    نقل قول نوشته شده توسط minaalamshahi مشاهده تاپیک
    اول ممنون که وقت گذاشتید
    بله پستم رو ویرایش کردم
    اگر امکانش هست این قسمت رو بیشتر برام توضیح بدید
    به عنوان مثال به جواب سوال شما که تو اول پست قرار دادم توجه کنید:
    >(?:\w|\d|_|\/)+\|((?:\w|\d)+)\|

    گروه های ایجاد شده به این ترتیب خوانده میشند:
    1- گروه اول: کل عبارت.
    2- گروه دوم: عبارت زیر مشخص میکنه ولی چون با علامت (?: ) نوشته شده شمارش نمیشه:
    (?:\w|\d|_|\/)

    3- گروه سوم: عبارت زیر مشخص میکنه ولی چون گروه قبلی شمارش نشد، گروه دوم محسوب میشه:
    ((?:\w|\d)+)

    4- گروه چهارم: داخل گروه قبلی قرار داره و مثل گروه دوم شمارش نمیشه:
    (?:\w|\d)


    بنابراین ما فقط یه یک گروه دسترسی داریم و اون گروه سوم هست با شماره ایندکس 1 (شماره ایندکس ها از صفر شروع میشه، و همینطوری که گفتم گروه سوم، دومی محسوب میشه)

    اگه سوال دیگه داشتید در خدمتم

  9. #9

    نقل قول: مشکل در MatchCollection

    شرمنده امکانش هست این خط رو برام تفسیر کنید؟
    >\\w+?\\|(\\w+?)\\|(.+?)\n
    مخصوصا قسمت
    \n
    .+?
    \\
    w+?

    ؟ اینجا همون معنی عدم شمارش که نداره؟
    یه سوال دیگه اینکه من این دستور
    >\\w+?\\|(\\w+?)\\|(.+?)\n+([ACGT\n]+)

    رو که داخل سایتی که گفته بودین گذاشتم توی اونجا بهم میده مثلا 2 تا matches .اما دخل برنامه که میزارم به قول شما روی یکی از فایلها جواب نمیده.پس چرا تو سایت بهم تعداد match ها رو نشون میده؟
    آخرین ویرایش به وسیله minaalamshahi : یک شنبه 14 تیر 1394 در 16:09 عصر

  10. #10

    نقل قول: مشکل در MatchCollection

    علامت عدم شمارش گروه، پرانتز داره و یک دو نقطه هم جلوی اونه.
    اینجا علامت سوال بعد از علامت + استفاده شده و معنی اون این هست که عبارت قبلی در حد ممکن از کاراکتر های کمتری تشکیل شده باشه.

    این عبارت کل یک خط انتخاب میکنه، کسی براتون نوشته؟
    فک کنم چند جاش مشکل داشته باشه

  11. #11

    نقل قول: مشکل در MatchCollection

    یه سوالی که واقعا برام هست اینه که داخل سایت http://www.regexr.com/
    من همین عبارتی که خودم داشتم استفاده می کنم تمام حالات رو
    تمام خطوط انتخاب شده و زده 1match ؟؟
    اما دستور شما هم تست کردم روی دوتاش جواب میده یکیش نه.
    خوب این یعنی که صدق می کنه ولی تو برنامه جواب نمیده
    بله این عبارت رو قبل از این پست کسی برام نوشته بود ولی فقط روی حالت پایین بهم جواب نمیده
    بقیه حالات رو ساپورت میکنه
    اخه من غیر از آی دی ،قسمت دیتا رو هم میخوام.ولی ای دی رو توی یک گروه و دیتا رو توی گروه دیگه.
    پس \n کل خط رو بهمون میده؟یعنی
    >\\w+?\\|(\\w+?)\\|(.+?)\n+([ACGT\n]+)

    acgt رو بخون تا زمانیکه تموم بشه؟
    >CY080801

    ATGAAAGTAAAACTACTGGTCCTGTTATGCACATTTACAGCTA

    dot(.) ، چه معنی داره؟
    شرمنده ولی این جمله رو متوجه نمیشم؟
    اینجا علامت سوال بعد از علامت + استفاده شده و معنی اون این هست که عبارت قبلی در حد ممکن از کاراکتر های کمتری تشکیل شده باشه.
    عذر میخوام یه مشکلی رو یه نمونه ای مثل نمونه زیر هم دارم که تعداد کاراکتر | نامشخص هست ولی من قسمت رنگی شده رو لازم دارم
    ولی اصولی که داره میگن بین سه تا | اول یا همون اولی رو باید در نظر بگیرم.و بقیه رو کامنت در نطر بگیرم
    >A/California/VRDL92/2009|CY063107|4|HA|A|H1N1|10/17/2009|09_10|USA|Human|Y|AdmantaneResistance_Yes|Ose ltamivirResistance_No|IncreasedVirulence_No|Enhanc edTransmission_Yes|T92E_No|No

    ATGAAGGCAATACTAG

    البته بگم داخل سایت درست تشخیص میده ها
    توی برنامه جواب نمیده


    آخرین ویرایش به وسیله minaalamshahi : یک شنبه 14 تیر 1394 در 20:29 عصر

تاپیک های مشابه

  1. یک مشکل هنگام کپی کردن فایل مربوط به بانک
    نوشته شده توسط ghaum در بخش SQL Server
    پاسخ: 4
    آخرین پست: یک شنبه 25 اردیبهشت 1384, 23:00 عصر
  2. مشکل در دسترسی به Interbase
    نوشته شده توسط Mahdiseif در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 8
    آخرین پست: سه شنبه 26 فروردین 1382, 00:03 صبح
  3. مشکل در بی دی ای دلفی
    نوشته شده توسط hosseinabdollah در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: یک شنبه 17 فروردین 1382, 17:38 عصر
  4. مشکل ارسال ایمیل در سایت
    نوشته شده توسط mahmoodreza در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 2
    آخرین پست: شنبه 16 فروردین 1382, 14:24 عصر
  5. مشکل در نمایش Time
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 4
    آخرین پست: شنبه 24 اسفند 1381, 10:23 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •