2012-04-04 13 views
5

मैं सोच रहा था कि क्या कोई तरीका है कि मैं स्ट्रिंग के भीतर सबस्ट्रिंग को प्रतिस्थापित कर सकता हूं लेकिन उन्हें बदलने के लिए स्ट्रिंग के बीच वैकल्पिक। आईई, स्ट्रिंग "**" स्ट्रिंग के सभी अवसरों से मेल खाता है और "<strong>" के साथ पहली घटना को प्रतिस्थापित करता है और अगली घटना "</strong>" (और फिर उस पैटर्न को दोहराएं) के साथ बदलें।सबस्ट्रिंग्स की जगह बदलना

इनपुट कुछ इस तरह होगा: "This is a sentence with **multiple** strong tags which will be **strong** upon output"

और उत्पादन लौटे होगा: "This is a sentence with <strong>multiple</strong> strong tags which will be <strong>strong</strong> upon output"

+2

आप लूप में स्टार्ट इंडेक्स के साथ 'इंडेक्सऑफ' का उपयोग कर सकते हैं। – CodesInChaos

+0

@CodeInChaos मैंने वास्तव में इंडेक्सऑफ का उपयोग नहीं किया है जो अक्सर, इसमें एक नज़र डालेगा लेकिन क्या आपके पास कार्यान्वयन की कोई विधि होगी? – JakeJ

उत्तर

6

आप Regex.Replace का अधिभार कि एक MatchEvaluator प्रतिनिधि लेता है का उपयोग कर सकते हैं:

using System.Text.RegularExpressions; 

class Program { 
    static void Main(string[] args) { 
     string toReplace = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 
     int index = 0; 
     string replaced = Regex.Replace(toReplace, @"\*\*", (m) => { 
      index++; 
      if (index % 2 == 1) { 
       return "<strong>"; 
      } else { 
       return "</strong>"; 
      } 
     }); 
    } 
} 
+0

इस पर स्पॉट। +1। – SkonJeet

+0

@ पाओलो मैंने अभी इसे फिर से इस्तेमाल किया और महसूस किया कि कोड छोटा हो सकता है और यदि आप 'if' कथन को 'वापसी सूचकांक% 2 == 1' से प्रतिस्थापित करते हैं तो थोड़ा बेहतर दिखता है? "": ""; ' – JakeJ

1

ऐसा करने का सबसे आसान तरीका वास्तव में की बजाय **(content)** के लिए regex होगा। फिर आप इसे <strong>(content)</strong> से प्रतिस्थापित करते हैं और आप कर चुके हैं।

आप https://code.google.com/p/markdownsharp पर मार्कडाउनशर्प को भी देखना चाहते हैं, क्योंकि यह वास्तव में आप उपयोग करना चाहते हैं।

+0

यह सबसे साफ दृष्टिकोण है, +1। –

+0

मैंने मार्कडाउनशर्प को देखा है, लेकिन मैं केवल इनपुट के लिए बोल्डिंग चाहता हूं, न कि पूरी सुविधाएं। जब इसे अनुरोध किया जाता है तो मैं इसका उपयोग शुरू कर सकता हूं – JakeJ

-1

इसे आजमाएं

var sourceString = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 
var resultString = sourceString.Replace(" **","<strong>"); 
resultString = sourceString.Replace("** ","</strong>"); 

चियर्स,

+0

जो स्पष्ट रूप से अपने spec फिट नहीं है। – CodesInChaos

+0

रिक्त स्थान मौजूद नहीं होने पर यह गड़बड़ हो जाएगा, और ऐसा कोई कारण नहीं है कि उन्हें चाहिए। –

+1

यह मेरे द्वारा निर्दिष्ट इनपुट के लिए काम करता है लेकिन यदि '**' का प्रारंभिक समूह स्ट्रिंग की शुरुआत में है, तो आपको – JakeJ

-3

मुझे लगता है कि आप आकार से मिलान और इसे बदलना रेगुलर एक्सप्रेशन का उपयोग करना चाहिए, यह काफी आसान है।

+0

किसी समस्या के लिए बहुत सरलता है। कृपया उस कोड में एक उदाहरण प्रदान करें जो पहले ही प्रदान नहीं किया गया है। – vapcguy

1

आप इस को हल करने के रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

string sentence = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 

var expression = new Regex(@"(\*\*([a-z]+)\*\*)"); 

string result = expression.Replace(sentence, (m) => string.Concat("<strong>", m.Groups[2].Value, "</strong>")); 

यह दृष्टिकोण सिंटैक्स त्रुटि स्वचालित रूप से संभाल लेंगे (This **word should be **strong** इस तरह की स्ट्रिंग के बारे में सोच)।

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