গাইডের জন্য সি # রেজেক্স


122

আমার একটি স্ট্রিং দিয়ে পার্স করতে হবে এবং প্রতিটি গাইডের মানটির চারপাশে একক উদ্ধৃতি যুক্ত করতে হবে। আমি ভাবছিলাম আমি এটি করতে একটি রেজেক্স ব্যবহার করতে পারি তবে আমি ঠিক একজন রেজেক্স গুরু নই।

গাইডকে শনাক্ত করার জন্য কি কোনও ভাল রেজেক্স ব্যবহার করা যায়?

আমার দ্বিতীয় প্রশ্নটি একবার আমি একটি বৈধ রেইগেক্স পেয়েছি আমি ধরে নিচ্ছি যে আমি ব্যবহার করব Regex.Replace(String, String, MatchEvaluator)তবে আমি সিনট্যাক্স সম্পর্কে যথেষ্ট নিশ্চিত নই। হতে পারে এরকম কিছু:

return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
    return string.Format("'{0}'", match.Groups[0].ToString());
});

এমন একটি স্ট্রিং যা আমি বিশ্লেষণের চেষ্টা করছি তা দেখতে এরকম হতে পারে:

"পাসওয়ার্ডকো.০..পিএসএইচআরওআর্ড_সিওএনএফআইজি_আইডি কে পাসওয়ার্ড হিসাবে নির্বাচন করুন ON


5
এটি এসকিউএল এবং আপনার এসকিউএল পরামিতি ব্যবহার করা উচিত।
jrummell

2
আপনি কেন রিজেক্স ব্যবহার করবেন সেখানে একটি গাইড রয়েছে UID ইসজিইউইড
মাইকা আর্মান্ট্রুট

আসলে, এখানে একটি প্যারামিটার রয়েছে তবে এটি যেখানে ক্লজটির মান হিসাবে একই। এটা কোথা থেকে আসছে? একজন প্রোফাইলার?
jrummell

@jrummell এটি একজন প্রোফাইলার থেকে আসছে হ্যাঁ। আমি আউটপুটটিকে এমন রূপান্তরিত করার চেষ্টা করছি যাতে আমি এটি অনুলিপি করে আটকে দিতে পারি এবং এটি এসকিউএল ম্যানেজমেন্ট স্টুডিওতে চালাতে পারি। এটি শুধুমাত্র লগিংয়ের উদ্দেশ্যে। এটি এখনও প্যারামেট্রাইজড বর্গ হিসাবে চালানো হবে।
কোল ডাব্লু

1
মধ্যে Guess আউট ভুল ছিলাম msdn.microsoft.com/en-us/library/...
মীখা Armantrout

উত্তর:


182

এটি একদম সহজ এবং আপনারা যেমন বলছেন তেমন কোনও প্রতিনিধি প্রয়োজন হয় না।

resultString = Regex.Replace(subjectString, 
     @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$", 
     "'$0'");

এটি নিম্নলিখিত শৈলীর সাথে মেলে যা কোনও জিইউইডির জন্য সমস্ত সমতুল্য এবং গ্রহণযোগ্য ফর্ম্যাট।

ca761232ed4211cebacd00aa0057b223
CA761232-ED42-11CE-BACD-00AA0057B223
{CA761232-ED42-11CE-BACD-00AA0057B223}
(CA761232-ED42-11CE-BACD-00AA0057B223)

আপডেট 1

@ ননস্ট্যাটিক মন্তব্যগুলিতে এই বিষয়টি উল্লেখ করেছেন যে উপরের রেজেক্সটি মিথ্যা ইতিবাচক সাথে মেলে যা একটি ভুল সমাপ্ত ডিলিমিটার রয়েছে।

এটি রেগেক্স শর্তাবলীর দ্বারা এড়ানো যেতে পারে যা বিস্তৃতভাবে সমর্থিত।

শর্তাদি জে জিসফট ইঞ্জিন, পার্ল, পিসিআরই, পাইথন এবং। নেট ফ্রেমওয়ার্ক দ্বারা সমর্থিত। রুবি তাদের 2.0 সংস্করণ দিয়ে শুরু করে supports ডেলফি, পিএইচপি, এবং আর এর মতো ভাষাগুলিতে যেগুলি পিসিআরই ভিত্তিক রেগেক্স বৈশিষ্ট্যগুলিও শর্তসাপেক্ষ সমর্থন করে। (উত্স http://www.regular-expressions.info/conditional.html )

উইজে মেলে নীচে রেইগেক্স

{123}
(123)
123

আর মিলবে না

{123)
(123}
{123
(123
123}
123)

Regex:

^({)?(\()?\d+(?(1)})(?(2)\))$

প্রয়োজনে আরও কী কী প্রয়োজন তা আরও পরিষ্কার উপায়ে দেখানোর জন্য কেবল সংখ্যাগুলির সাথে মেলে সমাধানগুলি সরল করা হয়েছে।


লিখিত হিসাবে, এটি সমস্ত বৈধ প্রকার জিইউইডিগুলির জন্য কাজ করে না (তাই আপডেট)।
সেনফো

4
এটি লোয়ার কেস অক্ষরগুলির জন্য অ্যাকাউন্ট করে না যা একটি বৈধ কেস হবে। ^ [{| (]?? [0-9a-fA-F] {8} [-]? ([0-9a-fA-F] {4} [-]?) {3} [0-9a- fA-F] {12} [) |}]? $ বা / i পতাকা ব্যবহার করুন
মাইকেল ব্রাউন

@ মিশেলব্রাউন এটি মিলের ক্ষেত্রে সংবেদনশীল নয়, দেখুন রেজিক্সঅপশনস the কোড নমুনায় অজ্ঞান কেস।
বাকলি

1
রেজেক্স 4 বিয়োগের কম চিহ্নেরও অনুমতি দেবে। যারা এই বিষয়ে যত্নশীল তাদের জন্য Fyi। যারা পরোয়া করি না, এখানে একটি সহজ Regex যে আরো অনেক মিথ্যা positives দেয়: [0-9a-fA-F\-]{32,36}
usr ডিরেক্টরির

1
জন্য কাজ করে নাhttps://support.office.com/en-us/article/poisson-function-d81f7294-9d7c-4f75-bc23-80aa8624173a
zmechanic

40

সর্বাধিক বুনিয়াদী রেজেক্স অনুসরণ করছে:

(^([0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12})$) 

অথবা আপনি এটি এখানে পেস্ট করতে পারেন ।

আশা করি এটি আপনার কিছুটা সময় সাশ্রয় করবে।


প্রস্তাবিত উত্তরের মতো পুরোপুরি পূর্ণ নয়, তবে regex101.com লিঙ্কটির জন্য +1।
জিম বিলিগ

4
পুনরাবৃত্তি সরানো হয়েছে: [0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}ড্যাশ ঐচ্ছিক করা সম্ভব হয়েছে: [0-9A-Fa-f]{8}-?([0-9A-Fa-f]{4}-?){3}[0-9A-Fa-f]{12}
লুই সোমার

18

সি #। নীচের পাঠ্য থেকে কোনও গাইড সন্ধানের স্ট্রিংটি সন্ধান এবং প্রতিস্থাপন করার জন্য,

এই RegEx ব্যবহার করুন:

[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?

সি # কোড উদাহরণ:

var result = Regex.Replace(
      source, 
      @"[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?", 
      @"${ __UUID}", 
      RegexOptions.IgnoreCase
);

অবশ্যই কাজ! এবং এটি নীচের শৈলীর সাথে মেলে এবং প্রতিস্থাপন করে, যা কোনও জিইউডির জন্য সমস্ত সমতুল্য এবং গ্রহণযোগ্য ফর্ম্যাট।

"aa761232bd4211cfaacd00aa0057b243" 
"AA761232-BD42-11CF-AACD-00AA0057B243" 
"{AA761232-BD42-11CF-AACD-00AA0057B243}" 
"(AA761232-BD42-11CF-AACD-00AA0057B243)" 

4
গৃহীত উত্তরটি আমার পক্ষে কাজ করে নি তবে এইটি করেছে!
মেরিন নকরমি

এখানে একটি সমস্যা। গাইডে কেবলমাত্র হেক্সাডেসিমাল সংখ্যা থাকবে। সুতরাং এজেড এবং এজেড থেকে প্রাপ্ত চিঠিগুলি গ্রহণযোগ্য নয় তবে কেবলমাত্র আফিম এবং এএফ। অন্যথায় এটি 32 টি অক্ষর সহ কোনও পাঠ্যকে বৈধ গাইড হিসাবে গ্রহণ করবে।
মেরিন নাকারমি

দিতো - গৃহীত উত্তরটি আমার পক্ষে কাজ করে নি তবে এইটি করেছে!
গ্রেগ ট্র্যাভেলিক

8

.NET ফ্রেমওয়ার্ক 4-এ বর্ধিত সিস্টেম রয়েছে G গাইড কাঠামো, এর মধ্যে পার্স জিইউইডিতে নতুন ট্রাইপার্স এবং ট্রাই পার্সেক্স্যাক্ট পদ্ধতি রয়েছে। এখানে এর জন্য উদাহরণ।

    //Generate New GUID
    Guid objGuid = Guid.NewGuid();
    //Take invalid guid format
    string strGUID = "aaa-a-a-a-a";

    Guid newGuid;

    if (Guid.TryParse(objGuid.ToString(), out newGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", objGuid.ToString()));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", objGuid.ToString()));
    }


    Guid newTmpGuid;

    if (Guid.TryParse(strGUID, out newTmpGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", strGUID));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", strGUID));
    }

এই উদাহরণে আমরা নতুন গাইড অবজেক্ট তৈরি করি এবং একটি স্ট্রিং ভেরিয়েবলও নিই যাতে অবৈধ গাইড রয়েছে। এর পরে আমরা উভয় ভেরিয়েবলের বৈধ গাইড ফর্ম্যাট আছে কি না তা যাচাই করার জন্য ট্রাইপার্স পদ্ধতি ব্যবহার করি। উদাহরণস্বরূপ চালানোর মাধ্যমে আপনি দেখতে পাচ্ছেন যে স্ট্রিং ভেরিয়েবলের বৈধ গাইড ফর্ম্যাট নেই এবং এটি "ইনভালিড গাইডেন্স" এর বার্তা দেয়। স্ট্রিং ভেরিয়েবলের যদি এর চেয়ে বৈধ গাইড থাকে তবে ট্রাইপার্স পদ্ধতিতে এটি সত্য হবে।


7
প্রশ্নটি জিজ্ঞাসা করছিল যে কীভাবে কোনও দীর্ঘতর স্ট্রিং থেকে কোনও জিইউডিকে সন্ধান করতে / নিষ্কাশন করতে হয়, কোনও জিইউডিকে বৈধতা দেওয়া হয় না। আপনাকে এই উত্তরটি সরিয়ে দেওয়ার পরামর্শ দিন।
24:36

13
@ মিচাহ আর্মান্ট্রাউট: এটি একটি "ভাল" উত্তর হতে পারে, তবে এটি এই প্রশ্নের উত্তর নয় । আপনি যদি নিজের পছন্দ মতো যে কোনও উত্তর সরিয়ে থাকেন তবে এটি স্ট্যাকওভারফ্লো এর উদ্দেশ্যকে হারাতে পারে :)
কোডিং

8
ঠিক আছে, আমার মতো একজনের জন্য "গাইডের জন্য রেইজেক্স" সন্ধান করার জন্য, এই উত্তরটি সত্যই সবচেয়ে সহায়ক ছিল - আমার আসলেই একটি রেইজেক্সের দরকার নেই, আমার জিইউইডিগুলির সাথে মিল রাখতে হবে, এবং এই পৃষ্ঠাটি "রেজেক্স সনাক্ত করার জন্য প্রথম ফলাফল" গুগলে বর্তমানে গাইড ”।
ড্যান ফিল্ড 21

3
সেকেন্ডিং @ ড্যান ফিল্ড। আমি এখানে গাইডের জন্য রেজেক্সের অনুসন্ধানে এসেছি এবং এই উত্তরটি আমি যা চেয়েছিলাম তা হতে পারে। স্ট্যাকওভারফ্লো এর উদ্দেশ্য এভাবেই পূরণ হয়েছিল।
জেএলস্কট

এটি প্রাসঙ্গিক উত্তর নয় তবে এটি অবশ্যই সহায়ক। আমার কাছ থেকে একটি ভোট। :)
মেরিন নকরমি

8

আপনি সহজেই সি # কোডটি স্বয়ংক্রিয়ভাবে জেনারেট করতে পারেন: http://regexhero.net/tester/

এটা বিনামূল্যে.

আমি এটি কীভাবে করেছি তা এখানে:

এখানে চিত্র বর্ণনা লিখুন

ওয়েবসাইটটি তখন নেট নেট কোডটি স্বয়ংক্রিয়ভাবে উত্পন্ন করে:

string strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"     {CD73FAD2-E226-4715-B6FA-14EDF0764162}.Debug|x64.ActiveCfg =         Debug|x64";
string strReplace = @"""$0""";

return myRegex.Replace(strTargetString, strReplace);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.