2008-09-29 6 views
24

ऐसा लगता है कि .NET Regex.Replace विधि स्वचालित रूप से सभी मिलान करने वाली घटनाओं को प्रतिस्थापित करता है। मैं एक MatchEvaluator प्रतिनिधि प्रदान कर सकता हूं जो पहले प्रतिस्थापन के बाद मिलान की गई स्ट्रिंग देता है, कोई बदलाव नहीं करता है, लेकिन यह मेरे लिए बहुत अक्षम है।रीजिक्स को .NET में स्ट्रिंग में केवल पहली घटना को खोज/प्रतिस्थापित करने के लिए कैसे करें?

पहले प्रतिस्थापन के बाद रोकने का सबसे प्रभावी तरीका क्या है?

उत्तर

27

MSDN से:

Replace(String, String, Int32) 

एक निर्दिष्ट इनपुट स्ट्रिंग के भीतर, तार कि एक निर्दिष्ट प्रतिस्थापन तार के साथ एक नियमित अभिव्यक्ति पैटर्न से मेल खाता निर्दिष्ट अधिकतम संख्या बदल देता है।

क्या आप यह नहीं चाहते हैं?

25

बस मूल सवाल का जवाब देने ... निम्नलिखित regex शब्द foo का केवल पहला उदाहरण मेल खाता है: (?! <)

(?<!foo.*)foo

इस regex नकारात्मक lookbehind का उपयोग करता है यह सुनिश्चित करने के लिए कि मिलान किए जाने से पहले foo का कोई उदाहरण नहीं मिलता है।

3

आप शायद स्थिर विधि का उपयोग कर रहे थे। उसके लिए कोई (स्ट्रिंग, स्ट्रिंग, Int32) अधिभार नहीं है। पहले एक रेगेक्स ऑब्जेक्ट का निर्माण करें और myRegex.Replace का उपयोग करें।

0

उस मामले में आप का उपयोग नहीं कर सकते हैं:

string str ="abc546_$defg"; 
Regex regx = new Regex("[^A-Za-z0-9]"); 
str = regx.Replace(str,"",1) 

सूचना , यह प्रतिनिधित्व करता है:

string str ="abc546_$defg"; 
str = Regex.Replace(str,"[^A-Za-z0-9]", ""); 

इसके बजाय आप नए Regex उदाहरण घोषित करने और इस तरह इसका इस्तेमाल करने की जरूरत है घटनाओं की संख्या प्रतिस्थापन होना चाहिए।

0
बजाय एक new Regex बनाने की

आप भी

Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);

पहली घटना को बदलने के लिए कर सकते हैं।

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