2012-04-24 18 views
9

आइए कहें कि मेरे पास निम्न पाठ है और मैं "संख्याओं की शुरुआत" और "संख्याओं के अंत" के बीच पाठ निकालना चाहता हूं, वहां गतिशील मात्रा रेखाएं हैं और केवल एक चीज जो उनमें संख्याओं में बदलती है जैसे: पहला, दूसरा , आदि। प्रत्येक फ़ाइल से डेटा निकालने के लिए "संख्याओं की शुरुआत" और "संख्याओं के अंत" के बीच की रेखाओं की अलग-अलग मात्रा होगी। 0 नंबरों के बीच फ़ाइल में कितनी लाइनें होंगी और "संख्याओं के अंत" के बीच फ़ाइल में कितनी लाइनें होंगी, यह जानने के बिना मैं "संख्याओं का प्रारंभ" और "संख्याओं का अंत" के बीच सामग्री से मिलान करने के लिए एक रेगेक्स कैसे लिख सकता हूं?नियमित अभिव्यक्ति मिलान चर कई लाइनें?

सम्मान!

This is the first line This is the second line 

Start of numbers 

This is the first line 
This is the second line 
This is the third line 
This is the ...... line 
This is the ninth line 

End of numbers 

उत्तर

22

आप SingleLine मोड जो अपनी सी # रेगुलर एक्सप्रेशन . किसी भी चरित्र (नहीं \n को छोड़कर किसी भी चरित्र) से मेल खाता है बताता है का उपयोग करना चाहिए।

var regex = new Regex("Start of numbers(.*)End of numbers", 
        RegexOptions.IgnoreCase | RegexOptions.Singleline); 
+0

मैंने कभी यह नहीं सुना है। मैं यह नहीं कह रहा हूं कि आप गलत हैं लेकिन दस्तावेज [लिंक] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx) ऐसा नहीं लगता है कि न ही यह regex [link] (http://regexr.com?30oag): –

+2

@DavidZ .: नहीं। सिंगललाइन '.' को प्रभावित करती है, मल्टीलाइन'^'और' $ 'को प्रभावित करती है। हां, ऐसे स्थितियां हो सकती हैं जहां * सिंगललाइन और मल्टीलाइन दोनों को निर्दिष्ट करना समझ में आता है। :-) – Heinzi

+0

हाँ, आप सही हैं। मल्टीलाइन^और $ को प्रभावित करता है, मैं इस धारणा के तहत था कि सिंगललाइन भी करता है लेकिन दस्तावेज़ों को देखता है जो मामला नहीं है। –

2

आप। इस मुद्दे के बिना बहु लाइन तार मिलान करने के लिए बस (\n नई लाइनों के लिए) में सही पात्रों को जोड़ने के लिए याद में सक्षम होना चाहिए।

string pattern = "Start of numbers(.|\n)*End of numbers"; 
Match m = Regex.Matches(input, pattern); 

यह आसान है, तो आप सोच सकते हैं है छिपे हुए पात्रों के साथ आपकी स्ट्रिंग।

Start of numbers\n\nThis is the first line\nThis is the second line\n ... 
0

कुछ इस तरह:

^(शुरू) ([\ s \ n \ घ \ डब्ल्यू] *) (अंत) $

कहाँ अपने दूसरे समूह मिलता है। यदि आप चाहें तो समूह को भी नाम दे सकते हैं। तो मुद्दा यह है कि आप पूरी चीज को एक स्ट्रिंग में पढ़ते हैं और उसके बाद regexp परिणाम प्राप्त करते हैं।

संपादित करें:

थोड़ा संपादन करना है। यदि आप मिलान कर रहे हैं तो कहीं बीच में हो सकते हैं तो प्रारंभ (^) और अंत ($) वर्ण ड्रॉप करें। (प्रारंभ) ([\ s \ n \ d \ w] *) (अंत)

और एक नोट यह है कि इससे आपको केवल वे लाइनें मिलेंगी जिन्हें आप प्राप्त करना चाहते हैं। फिर इन लाइनों को संभालें।

0
/(?<=Start of numbers).*(?=End of numbers)/s 

आपको डॉटल ध्वज को सक्षम करने की आवश्यकता है।

http://regexr.com?30oaj

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