2012-06-27 13 views
6

में डबल व्यंजनों को मिलाएं मेरे पास कई शब्दों की एक सूची है। मुझे "आईएनजी", "एड", "ied" पर समाप्त होने वाले सभी शब्दों को ढूंढना है और एक स्वर के साथ और व्यंजन को दोगुना करना चाहिए: शब्दों से मेल खाना चाहिए: भिक्षा, झुकाव, ज़गिंग। की मदद से मेल नहीं (डबल व्यंजन -not "एल.पी.")Regex. C#

\w*[^aoyie][aoyie]([^aoyie])\1(ed|ing|ied) 

यह RegexPal.com पर काम कर रहा है, लेकिन यह सी # में काम नहीं कर रहा (मेल खाता नहीं किसी भी शब्द, सूची में 0 शब्द रिटर्न)

मेरे कोड:

List<Book_to_Word> allWords = (from f in db2.Book_to_Words.AsEnumerable() select f).ToList(); 

List<Book_to_Word> wordsNOTExist = (from f in allWords 
         where Regex.IsMatch(f.WordStr, @"^(\w*[^aoyie]+[aoyie]([^aoyie])(ed|ing|ied))$") 
            select f).ToList(); 

काम करता है जब मैं \ 1 का उपयोग नहीं करता। लेकिन एकल व्यंजन के साथ शब्दों को वापस करता है।

+0

यदि मैं उपरोक्त रेगेक्स में डालता हूं तो regexpal.com पर यह भीख मांगे या ज़गिंग से मेल नहीं खाता है। ऐसा करने के लिए nhahtdh द्वारा सुझाए गए संशोधन की आवश्यकता है। – Chris

+0

और क्या आप स्पष्टीकरण दे सकते हैं कि \ 1 का उपयोग करने के बारे में क्या काम नहीं करता है? क्या यह चीजों को वापस नहीं करता है या आपको संकलन त्रुटि मिलती है, क्या यह अपवाद फेंकता है ...? – Chris

उत्तर

0

nhahtdh के लिए धन्यवाद। समस्या बाहरी कोष्ठक में थी। जब मैंने उन्हें हटा दिया तो यह काम किया:

Regex.IsMatch(f.WordStr, @"^\w*[^aoyieu]+[aoyieu]([^aoyieu])\1(ed|ing|ied)$") 
+1

'ज़िगज़ैगिंग' के खिलाफ परीक्षण करने का प्रयास करें और यह असफल हो जाएगा (हालांकि मुझे इसे समझना नहीं चाहिए) - आपकी अभिव्यक्ति के साथ आप कह रहे हैं कि वहां से कोई स्वर नहीं हो सकता है डबल व्यंजन से पहले एक। nhahtdh का जवाब आपके लिए तय करता है। यह भी ध्यान दिया जाना चाहिए कि आप बाहरी कोष्ठक रख सकते थे और यदि आप चाहते थे तो \ 2 का इस्तेमाल किया जा सकता था। – Chris

+0

आप सही हैं। Regex.IsMatch में अपडेट किया गया (f.WordStr, @ "^ \ w * [^ aoyieu] + [aoyieu] ([^ aoyieu]) \ 1 (ed | ing | ied) $")। अब यह मिलान कर रहा है zigzagging – Vil

+0

@ विल्डन: '\ w' एक मैच" 45435gging "या" _pp_pping "बना देगा। लेकिन अगर वे डेटा में कभी नहीं होते हैं, तो इसका उपयोग करना ठीक है। – nhahtdh

6

हालत में थोड़ा आराम करने के लिए प्रयास करें:

@"^[a-z]*[aoyie]([^aoyie])\1(ed|ing|ied)$" 

आपकी वर्तमान regex डबल व्यंजन और प्रत्यय से पहले कम से कम 3 अक्षरों के लिए शब्द की आवश्यकता होगी। तो "भिखारी" और "ज़गिंग" मेल नहीं खाते हैं।

यह थोड़ा अजीब है, हालांकि, समूह में "वाई" देखने के लिए, जबकि "यू" गायब है (उदा। "मग")। आप शायद इसके बारे में दोबारा जांच करना चाहते हैं। और मुझे "ied" से पहले डबल व्यंजन के बारे में कुछ संदेह है, लेकिन मैं इसे वहां छोड़ दूंगा।

+0

मुझे लगता है कि विल्डन ने '1 1' के बारे में कहा था। कृपया इसे जाँचें। सी # ('perl' को छोड़कर सभी भाषाओं की तरह) नियमित अभिव्यक्तियों के लचीले संस्करण का समर्थन नहीं करता – gaussblurinc

+0

मैंने कोशिश की, लेकिन अभी भी – Vil

+0

@loldop पर काम नहीं कर रहा है: बैक-रेफरेंस सी #: http://msdn.microsoft.com/en-us में समर्थित है /library/thwdfzxy.aspx – nhahtdh