2012-11-18 29 views
5

यह कोड एक richtextbox की खोज करता है और सरणी के पहले फ़ील्ड को दूसरे स्थान पर बदल देता है। यह सभी खेतों को छोड़कर ठीक काम करता है।रेगेक्स में विशेष पात्रों से कैसे बचें?

iEmo = new string[,] { 
    {@":\)", Smile}, 
    {@":\(", Sad}, 
    {@"8\)", Cool}, 
    {@":\|", Neutral}, 
    {@";\)", Wink}, 
    {@">:\(", Evil}, // Won't work for this one 
    {@">:D", Twisted}, // Or this one 
    {@":\?", Question,} 
}; 

यहाँ बात यह है कि में सरणी में कनवर्ट करता है जो मैं चाहता:

public void SetSmiley(RichTextBox RichBox) { 
    for (int i = 0; i < (iEmo.Length/3); i++) { 
    try { 
     RichBox.Rtf = Regex.Replace(RichBox.Rtf, iEmo[i, 0], iEmo[i, 1], RegexOptions.IgnoreCase); 
    } 
    catch (Exception e){} 
    } 
} 
+0

मेरी गलती हाँ, हालांकि इसे 1 मिनट पहले "बार्ट" द्वारा संपादित किया गया था। धन्यवाद। – user1667191

+0

आप नियमित अभिव्यक्तियों का उपयोग क्यों कर रहे हैं? क्यों न सिर्फ सामान्य 'स्ट्रिंग। बदलें'? –

+0

मैंने इस विधि को भी आजमाया है, लेकिन फिर भी, यह अभी भी मेरी मूल समस्या उत्पन्न करता है। – user1667191

उत्तर

5

आपका रेगुलर एक्सप्रेशन, ठीक लग रहा है हालांकि मैं कुछ चीजें है कि यह काम करने से रोक रहे हैं देखें:

for (int i = 0; i < (iEmo.Length/3); i++) 

मुझे नहीं पता कि आप 3 से विभाजित क्यों कर रहे हैं। आपको इसके बजाय पहले आयाम की लंबाई का उपयोग करना चाहिए:

for (int i = 0; i < iEmo.GetLength(0); i++) 

इसके अतिरिक्त, आपके प्रतिस्थापन के क्रम में, सामान्य फ्राउन ":(" "बुराई" चेहरे ">:(" से पहले प्रतिस्थापित किया जाएगा। जब तक लूप बुराई के मामले में आता है, तो स्ट्रिंग ">Sad" की तरह दिखती है। आपका इस तरह जटिलता, कुछ अवरोही क्रम में अपने प्रतिस्थापन को पुनर्व्यवस्थित करना चाहिए:

iEmo = new string[,] 
{ 
    {@">:\(", Evil}, 
    {@":\)", Smile}, 
    {@":\(", Sad}, 
    {@"8\)", Cool}, 
    {@":\|", Neutral}, 
    {@";\)", Wink}, 
    {@">:D", Twisted}, 
    {@":\?", Question,} 
}; 

और फिर, सामान्य स्ट्रिंग प्रतिस्थापन ऊपर परिवर्तन के साथ ठीक से काम करेगा।

+0

भयानक दोस्त धन्यवाद फ्रेकिंग! यह तय है !! – user1667191

संबंधित मुद्दे