मैं स्केल में रेगेक्स के साथ एक बहु-पंक्ति वाली स्ट्रिंग के हिस्सों को कैप्चर करने की कोशिश कर रहा हूं। इनपुट फार्म का है:स्कैला रेगेक्स एकाधिक ब्लॉक कैप्चरिंग
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
मैं कई संभावनाएं है कि मुझे begin {
}
ब्लॉक के बाहर पाठ मिलना चाहिए की कोशिश की है। उनमें से एक:
val Block = """(?s).*begin \{(.*)\}""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
मैं एक NO MATCH
मिलता है। अगर मैं \}
ड्रॉप करता हूं तो रेगेक्स (?s).*begin \{(.*)
जैसा दिखता है और यह अवांछित }
और "कुछ टेक्स्ट" सहित अंतिम ब्लॉक से मेल खाता है। मैंने /.*begin \{(.*)\}/m
के साथ rubular.com पर अपने regex की जांच की और यह कम से कम एक ब्लॉक से मेल खाता है। मैंने सोचा कि जब मेरा स्कैला रेगेक्स मेल खाता है तो मैं सभी ब्लॉक से मेल खाने के लिए findAllIn
का उपयोग शुरू कर सकता हूं। मैं क्या गलत कर रहा हूं?
मैंने Scala Regex enable Multiline option पर एक नज़र डाली थी, लेकिन मैं टेक्स्ट ब्लॉक की सभी घटनाओं को कैप्चर करने में सक्षम नहीं था, उदाहरण के लिए, Seq[String]
। किसी भी मदद की सराहना की है।
क्या आप जानते हैं कि यह कहीं भी दस्तावेज है? आपके विस्तृत उत्तर के लिए –
धन्यवाद डैनियल। एक जादू की तरह काम करता है। –
एलेक्स, इस बिंदु पर, मुझे यकीन नहीं है। मैंने रेगेक्स के साथ बहुत कुछ किया, यहां तक कि लाइब्रेरी का विस्तार भी किया, कि मैं यह भी याद नहीं कर सकता कि पुस्तकालय क्या प्रदान करता है या नहीं! उदाहरण के लिए, मैं 'ब्लॉक findAllMatches इनपुट इनपुट (_ समूह 0) में लिखने जा रहा था, जब मुझे पता चला कि यह विधि लाइब्रेरी में मौजूद नहीं है। –