2009-07-23 9 views
24

ठीक है, यह मुझे पागल गाड़ी चला रहा है .... मैं एक स्ट्रिंग है इस प्रकार का गठन किया जाता है:Regex कि सी # में एक नई पंक्ति ( N) से मेल खाता है

var newContent = string.Format("({0})\n{1}", stripped_content, reply) 

newContent प्रदर्शित करेगा की तरह:
(पुराने पाठ)
नया पाठ

मैं रेगुलर एक्सप्रेशन दूर स्ट्रिप्स कि कोष्ठक शामिल और न्यू लाइन चरित्र के साथ कोष्ठक के बीच पाठ की जरूरत है।

सबसे अच्छा मैं के साथ आ सकता है:

const string regex = @"^(\(.*\)\s)?(?<capture>.*)"; 
var match= Regex.Match(original_content, regex); 
var stripped_content = match.Groups["capture"].Value; 

यह काम करता है, लेकिन मैं विशेष रूप से चाहते हैं न्यू लाइन (\n) मैच के लिए, कोई श्वेत रिक्ति नहीं (\s) साथ \n\\n या \\\n करता \s की जगह काम नहीं।

कृपया मेरी सैनिटी पर ध्यान रखने में मेरी सहायता करें!

संपादित करें: एक उदाहरण:

public string Reply(string old,string neww) 
     { 
      const string regex = @"^(\(.*\)\s)?(?<capture>.*)"; 
      var match= Regex.Match(old, regex); 
      var stripped_content = match.Groups["capture"].Value; 
      var result= string.Format("({0})\n{1}", stripped_content, neww); 
      return result; 
     } 

Reply("(messageOne)\nmessageTwo","messageThree") returns : 
(messageTwo) 
messageThree 
+0

क्या आप एक छोटा लेकिन पूरा कार्यक्रम पोस्ट कर सकते हैं जो समस्या का प्रदर्शन करता है? मुझे इस समय एक साथ टुकड़ा करना मुश्किल लगता है। –

उत्तर

54

यदि आप RegexOptions.Multiline निर्दिष्ट करते हैं तो आप क्रमशः लाइन की शुरुआत और अंत से मेल खाने के लिए ^ और $ का उपयोग कर सकते हैं।

आप इस विकल्प का उपयोग करने के लिए याद है एक नई लाइन निम्न में से कोई एक हो सकता है कि आप नहीं चाहते कि: \n, \r, \r\n, इसलिए केवल \n की तलाश के बजाय, आप शायद की तरह कुछ का उपयोग करना चाहिए: [\n\r]+ , या अधिक सटीक: (\n|\r|\r\n)

+17

यह मत भूलना कि विकल्प लालची नहीं है; यदि आप अपने regex को \ "\ r \ n" पर लागू करते हैं, तो यह केवल '\ r "' से मेल खाएगा। मैं '(\ n | \ r \ n?)' या शायद '(\ r \ n? | \ N) 'का उपयोग करूंगा। –

+0

मैं इसे मल्टीलाइन विकल्प के साथ काम करने के लिए नहीं मिला। (\ n | \ r | \ r \ n) चाल चल रही थी। यह सामने आया कि इस विशेष मामले में \ r \ n एक मैच प्राप्त करने के लिए आवश्यक था, भले ही मैंने स्ट्रिंग में मिलान करने के लिए केवल \ n डाला। – Dabblernl

+0

@AlanMoore इसके लिए धन्यवाद। मैं उलझन में था क्यों \ r \ n' दो बार मेल खाता था। – ToastyMallows

3

आप तो लाइन अंत मैच के लिए प्रयास कर रहे हैं आप

Regex.Match("string", "regex", RegexOptions.Multiline) 

मिल सकता है में मदद करता है

+1

क्षमा करें, यह काम नहीं करता – Dabblernl

4

आप शायद एक \ r के लिए जा रहे हैं आपके \ n से पहले \ S \ n \ n) को बदलने का प्रयास करें।

15

acctually यह विपरीत विकल्प अर्थात

RegexOptions.Singleline 

:-)

+1

अच्छा! उसने मेरे लिए इसे हल कर दिया! किसी भी तरह, लाइन अंतराल को मल्टीलाइन विकल्प का उपयोग करके अनदेखा किया जाता है। लेकिन एक लाइन के साथ यह किया था! +1 – Yustme

+0

इस सुझाव के लिए धन्यवाद, बहु-पंक्ति इनपुट को 'सिंगललाइन' मोड में ठीक से संसाधित किया जाता है ... लेकिन व्यवहार अलग-अलग होता है और कभी-कभी 'सिंगललाइन' व्यवहार की आवश्यकता होती है! मुझे पता था कि मेरा इनपुट बहु-रेखा था, इसलिए मैं वास्तव में इसके बारे में सोचने के बिना 'मल्टीलाइन' विकल्प सेट करता हूं ... लेकिन इस मामले में '.' (डॉट) न्यूलाइन चारों से मेल नहीं खाता जो वास्तव में मैं था चाहता था। 'सिंगललाइन' पर सेट करने से इस समस्या को ठीक किया गया है। उन मामलों में '$' इनपुट स्ट्रिंग के अंत से मेल खाता है जो सुविधाजनक भी है। इतना सबक सीखा: मल्टी-लाइन इनपुट का हमेशा मतलब नहीं है कि 'मल्टीलाइन' विकल्प का उपयोग किया जाना चाहिए! – TCC

+0

मुझे नहीं पता कि ओपी क्या चाहता था या नहीं, लेकिन यह वही था जो मैं चाहता था! यह मेरे regex के लिए पाठ खोजना है और प्रभावी रूप से, लाइन फ़ीड्स को अनदेखा करना है। धन्यवाद। – glaucon

3

सोचो मैं थोड़ा पार्टी के लिए देर से हो सकता है के साथ काम करता है, लेकिन, लेकिन अभी भी यह मदद करता है उम्मीद है।

मुझे दो हैश संकेतों के बीच एकाधिक टोकन प्राप्त करने की आवश्यकता है।

उदाहरण मैं/p:

## token1 ##
## token2 ##
## token3_a
token3_b
token3_C##

यह मेरे मामले में काम करने के लिए लग रहा था:

var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);

बेशक, आप अपने स्वयं के वर्णों के साथ दोनों सिरों पर डबल हैश संकेतों को प्रतिस्थापित करना चाह सकते हैं।

एचटीएच।

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