गाइड के लिए C # Regex


122

मुझे एक स्ट्रिंग के माध्यम से पार्स करने की आवश्यकता है और प्रत्येक दिशानिर्देश मूल्य के आसपास एकल उद्धरण जोड़ें। मैं सोच रहा था कि मैं ऐसा करने के लिए एक रेगेक्स का उपयोग कर सकता हूं लेकिन मैं वास्तव में रेगेक्स गुरु नहीं हूं।

एक गाइड की पहचान करने के लिए उपयोग करने के लिए एक अच्छा रेगेक्स है?

मेरा दूसरा प्रश्न एक बार मुझे एक मान्य रेगेक्स मिल गया है जिसे मैं मान रहा हूं कि मैं उपयोग करूंगा Regex.Replace(String, String, MatchEvaluator)लेकिन मैं वाक्य रचना के बारे में निश्चित नहीं हूं। शायद कुछ इस तरह:

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

एक स्ट्रिंग जिसे मैं पार्स करने की कोशिश कर रहा हूं वह इस तरह दिख सकती है:

"PASSWORD1_46_0_, FASS PASSWORD_CONFIG पासवर्डको के रूप में" सिलेक्ट पासवर्डको0_.PASSWORD_CONFIG_ID "का चयन करें, जहां पासवर्ड पासवर्ड 0_.PASSWORD_ONFIG_ID = baf04077-a3c0-454b -9fec-9f009-9f009-9f009/9f00-9f009-9004-9&hl=hi पर जाएं।


5
यह SQL है, और आपको SQL पैरामीटर का उपयोग करना चाहिए।
jrummell

2
आप रेगेक्स का उपयोग क्यों करेंगे वहां एक GUID.IsGUid है
मीका आर्मेंट्राउट

वास्तव में, एक पैरामीटर है, लेकिन इसके खंड में मान के समान है। यह कहां से आ रहा है? एक प्रोफाइलर?
jrummell

@jrummell यह एक प्रोफाइलर से आ रहा है। मैं आउटपुट को ऐसे बदलने की कोशिश कर रहा हूं कि मैं इसे कॉपी और पेस्ट कर सकूं और इसे SQL मैनेजमेंट स्टूडियो में चला सकूं। यह केवल लॉगिंग उद्देश्यों के लिए है। यह अभी भी पैराट्राइज्ड एसक्यूएल के रूप में चलाया जाएगा।
कोल डब्ल्यू

1
लगता है कि मैं गलत था msdn.microsoft.com/en-us/library/…
मीका आर्मेंट्राउट

जवाबों:


182

यह एक काफी सरल है और आपको एक प्रतिनिधि की आवश्यकता नहीं है जैसा कि आप कहते हैं।

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

यह निम्नलिखित शैलियों से मेल खाता है, जो एक GUID के लिए सभी समान और स्वीकार्य प्रारूप हैं।

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

अपडेट १

@NonStatic टिप्पणियों में यह बात स्पष्ट करती है कि उपरोक्त रेगीक्स गलत सकारात्मकता से मेल खाएगा जिसमें गलत समापन परिसीमन है।

यह regex सशर्तियों से बचा जा सकता है जो मोटे तौर पर समर्थित हैं।

सशर्त JGsoft इंजन, पर्ल, पीसीआरई, पायथन और .NET फ्रेमवर्क द्वारा समर्थित हैं। रूबी उन्हें संस्करण 2.0 के साथ शुरू करने का समर्थन करती है। डेल्फी, पीएचपी, और आर जैसी भाषाओं में पीसीआरई पर आधारित रेगेक्स विशेषताएं भी सशर्त समर्थन करती हैं। (स्रोत http://www. अनियमित- expressions.info/conditional.html )

Regex जो निम्न मिलान करेगा

{123}
(123)
123

और मेल नहीं खाएगा

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

regex:

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

यदि आवश्यक हो तो अधिक स्पष्ट तरीके से दिखाने के लिए केवल संख्याओं के मिलान के लिए समाधान को सरल बनाया गया है।


जैसा कि लिखा गया है, यह सभी वैध प्रकार के GUID (इसलिए अद्यतन) के लिए काम नहीं करेगा।
senfo

4
यह निचले मामले के पात्रों के लिए जिम्मेदार नहीं है जो एक वैध मामला होगा। उपयोग ^ [{| ()? [0-9a-fA-F] {8} [-]? ([0-9a-fA-F] {4} [-]? {3} [0-9a- fA-F] {12} [) |}] $ / / झंडा का उपयोग करें
माइकल ब्राउन

@MichaelBrown यह केस केस असंवेदनशील है, कोड नमूने में RegexOptions.IgnoreCase देखें।
बकरी

1
रेगेक्स भी 4 से कम माइनस संकेत देगा। इस बात की परवाह करने वालों के लिए फी। जो परवाह नहीं करते हैं, उनके लिए यहां एक सरल रीगेक्स है जो कई और अधिक झूठी सकारात्मक अनुमति देता है [0-9a-fA-F\-]{32,36}:।
usr

1
काम नहीं करता हैhttps://support.office.com/en-us/article/poisson-function-d81f7294-9d7c-4f75-bc23-80aa8624173a
zmechanic

40

सबसे मूल regex निम्नलिखित है:

(^([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

C # .Net के लिए दिए गए पाठ से किसी भी गाइड को स्ट्रिंग ढूंढने और बदलने के लिए,

इस RegEx का उपयोग करें:

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

उदाहरण C # कोड:

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

निश्चित रूप से काम करता है! और यह निम्नलिखित शैलियों से मेल खाता है और प्रतिस्थापित करता है, जो एक GUID के लिए सभी समकक्ष और स्वीकार्य प्रारूप हैं।

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

4
स्वीकृत उत्तर मेरे लिए काम नहीं करता था लेकिन इसने किया!
मेरिन नाकामरी

एक समस्या यहाँ। गाइड में केवल हेक्साडेसिमल संख्याएँ होंगी। इस प्रकार az और AZ के अक्षर स्वीकार्य नहीं हैं, लेकिन केवल af और AF हैं। अन्यथा यह 32 अक्षर वाले किसी भी पाठ को एक मान्य मार्गदर्शिका के रूप में स्वीकार करेगा।
मेरिन नाकामरी

Ditto - स्वीकृत उत्तर मेरे लिए काम नहीं करता था, लेकिन इसने किया!
ग्रेग ट्रेवेलिक

8

.NET फ्रेमवर्क 4 में एन्हांसमेंट सिस्टम है। ग्रिड संरचना, इनमें पार्स GUID के नए TryParse और TryParseExact विधियां शामिल हैं। यहाँ इसके लिए उदाहरण दिया गया है।

    //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));
    }

इस उदाहरण में हम नई गाइड ऑब्जेक्ट बनाते हैं और एक स्ट्रिंग वेरिएबल भी लेते हैं जिसमें अमान्य गाइड होता है। उसके बाद हम TryParse मेथड का उपयोग यह सत्यापित करने के लिए करते हैं कि दोनों वैरिएबल के पास वैध गाइड प्रारूप है या नहीं। उदाहरण चलाकर आप देख सकते हैं कि स्ट्रिंग चर में मान्य गाइड प्रारूप नहीं है और यह "इनवैलिड गाइड" का संदेश देता है। यदि स्ट्रिंग चर के पास वैध गाइड है, तो यह TryParse पद्धति में सही होगा।


7
सवाल पूछ रहा था कि कैसे एक लंबी स्ट्रिंग से एक GUID को खोजने / निकालने के लिए, एक GUID को मान्य नहीं। सुझाव है कि आप इस उत्तर को हटा दें।
कोडिंग

13
@ मिकाह आर्मेंट्राउट: यह एक "अच्छा" उत्तर हो सकता है, लेकिन यह इस प्रश्न का उत्तर नहीं है । यदि आप किसी भी तरह का कोई भी उत्तर देते हैं, तो यह StackOverflow के उद्देश्य को हरा देता है :)
कोडिंग

8
वैसे, मेरे जैसे किसी व्यक्ति के लिए "गाइड के लिए रेगेक्स" की खोज करना, यह उत्तर वास्तव में सबसे अधिक उपयोगी था - मुझे वास्तव में एक रेगेक्स की आवश्यकता नहीं है , मुझे GUIDs से मिलान करने की आवश्यकता है, और यह पृष्ठ "रेगेक्स का पता लगाने के लिए पहला परिणाम है। गाइड "वर्तमान में Google पर।
डैन फील्ड

3
@Dan फ़ील्ड को सुरक्षित करना। मैं गाइड के लिए रेगेक्स की खोज पर यहां आया था और मुझे यह जवाब मिला कि मैं वास्तव में क्या चाहता था। StackOverflow का उद्देश्य इस प्रकार पूरा हुआ।
JLScott

यह प्रासंगिक उत्तर नहीं है, लेकिन यह मददगार है। एक वोट मुझसे। :)
मेरिन नाकामरी

8

आप http://regexhero.net/tester/ का उपयोग करके आसानी से C # कोड को स्वतः उत्पन्न कर सकते हैं ।

यह निःशुल्क है।

यहाँ देखें कि मैंने यह कैसे किया:

यहां छवि विवरण दर्ज करें

वेबसाइट तब .NET कोड को स्वतः उत्पन्न करती है:

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);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.