2009-11-12 9 views
5

मैं \n की सभी घटनाओं को <BR> टैग के साथ बदल रहा हूं, लेकिन किसी कारण से टेक्स्ट में कई \n पंक्ति में हैं, इसलिए मुझे उन्हें गठबंधन करने की आवश्यकता है।मैं एक सिंगल लाइन ब्रेक को एक <BR> से कैसे बदल सकता हूं?

असल में, यदि 1 से अधिक \ n एक साथ होते हैं, तो इसे केवल < BR> टैग के साथ बदलें।

क्या कोई इस से मेरी सहायता कर सकता है?

+3

अपने आप को कम मत समझें। यदि आप यह भी जानते हैं कि रेगेक्स क्या है, तो शायद आपको पहले से ही इस प्रश्न का उत्तर पता है। –

उत्तर

18

यह स्थान ले लेगा एक भी <br /> साथ गाड़ी-रिटर्न (\r) और/या linefeeds (\n) के किसी भी क्रम:

string formatted = Regex.Replace(original, @"[\r\n]+", "<br />"); 

यदि आप केवल दो या दो से अधिक वस्तुओं के अनुक्रमों को प्रतिस्थापित करना चाहते हैं तो सरल उत्तर {2,} क्वांटिफ़ायर (जिसका अर्थ है "कम से कम दो पुनरावृत्ति" का अर्थ + (जिसका अर्थ है "कम से कम एक पुनरावृत्ति"):

string formatted = Regex.Replace(original, @"[\r\n]{2,}", "<br />"); 

ध्यान दें कि अभिव्यक्ति उपरोक्त दो मदों की एक अनुक्रम के रूप में आम सीआर + वामो संयोजन व्यवहार करेगा। ऐसा नहीं है कि आप सीआर + वामो एक आइटम के बजाय, जिस स्थिति में अभिव्यक्ति थोड़ा और अधिक जटिल हो जाता है के रूप में इलाज के लिए चाहता हूँ संभावित है:

string formatted = Regex.Replace(original, @"(?:\r\n|\r(?!\n)|(?<!\r)\n){2,}", "<br />"); 
+0

\ r क्या है? के लिये? – mrblah

+1

\ r कैरिज रिटर्न के लिए है। विंडोज़ (डॉस) स्वरूपित पाठ में, आप \ r \ n के रूप में कैरिज रिटर्न/लाइन फ़ीड संयोजन देखेंगे। –

+0

प्रतिस्थापन से पहले कम से कम 2 दोहराना सेट करना संभव होगा? – mrblah

2

निम्नलिखित कोड का उपयोग करें:

str = Regex.Replace(str, @"[\r\n]+", "<br />"); 

यह अच्छी तरह से इस तरह सामान्य Replace विधि कई बार फोन करके बिल्कुल नहीं एक Regex उपयोग करने के लिए, तेजी से हो सकता है:

int oldLength; 
do { 
    oldLength = str.Length; 
    str = str.Replace('\r', '\n'); 
    str = str.Replace("\n\n", "\n"); 
} while(str.Length != oldLength); 

str = str.Replace("\n", "<br />"); 
-1

ध्यान दें कि string.Replace() RegEx का उपयोग कर की तुलना में बहुत तेजी से होता है:

string result = oldString.Replace("\n\n","\n"); 
result = result .Replace("\n","<br>"); 
+0

यह तीन न्यूलाइनों को संभाल नहीं पाएगा; आपको इसे लूप में कॉल करने की आवश्यकता है। मेरा जवाब देखें – SLaks

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