2011-10-06 7 views
5

यह मुझे बेहद परेशान कर रहा है।.NET Regex सिंगल लाइन मिलान को बदलें अज्ञात वर्ण

static void Main(string[] args) 
{ 
    String input = "test"; 
    String pattern = ".*"; 
    String replacement = "replace"; 
    Console.WriteLine(Regex.Replace(input, pattern, replacement)); 
    Console.Read(); 
} 

इस कंसोल के लिए आउटपुट:

replacereplace 

मैं समझता हूँ कि regex अजीब मिलान अंत लाइन वर्ण हो जाता है, लेकिन कोई भी नहीं होनी चाहिए क्यों मैं डुप्लिकेट निम्नलिखित कोड में तार की जगह हो रही है। मैं यह भी समझता हूं कि पैटर्न कुछ भी मेल नहीं खा सकता है, लेकिन स्पष्ट रूप से इनपुट कुछ भी नहीं है। यह नेट 3.5 और 4.0 में होता है और मुझे सिंगललाइन और मल्टीलाइन के साथ एक ही चीज़ मिलती है।

मुझे पता है कि कई विकल्प हैं जो मैं उम्मीद कर रहा हूं लेकिन मैं अन्य मैच के बारे में और सोच रहा हूं। * इसकी खोज सोचती है।

उत्तर

4

कारण आपको दो प्रतिस्थापन मिलते हैं क्योंकि .* के साथ आपको दो मैच मिलते हैं: "test", और ""

आप .*.+ को बदलते हैं तो जिस तरह से आप यह करने के लिए उम्मीद से काम करेगा:

String pattern = ".+"; 

एक अन्य विकल्प स्ट्रिंग लंगर की शुरुआत को जोड़ने के लिए है:

String pattern = "^.*"; // I know this looks like a smiley 
+1

आपने मुझे फिनिशिंग लाइन में मिला :) – FailedDev

+0

मैं सहमत हूं, यह ठीक करता है लेकिन मैं क्यों देख रहा था। –

+0

@JoshuaBelden अद्यतन उत्तर देखें। – NullUserException

2

यह कुछ भी नहीं है और फिर से मेल खाता है यह सबकुछ से मेल खाता है इसलिए आपके पास दो मैचों और दो प्रतिस्थापन हैं।

+0

बेवकूफ कुछ भी नहीं। और मैंने पहले कभी इसमें क्यों नहीं भाग लिया है। –

+2

@ जोशुआबेल्डन शायद आप इसे चला चुके थे लेकिन आपने इसे कभी नहीं खोजा :) – FailedDev

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