2012-08-04 17 views
19

मैं इसरेगेक्स मैचों को जानने के बिना मैं रेगेक्स का उपयोग करके सबस्ट्रिंग (समूह) कैसे निकालूं?

val r = """^myprefix:(.*)""".r 
val r(suffix) = line 
println(suffix) 

उपयोग करना चाहते हैं लेकिन यह एक त्रुटि जब स्ट्रिंग से मेल नहीं खाता देता है। मैं एक समान निर्माण का उपयोग कैसे करूं जहां मिलान वैकल्पिक है?

संपादित करें: यह स्पष्ट करने के लिए, मैं समूह की जरूरत है (.*)

+1

तो, रेगेक्स मेल नहीं खाता है, एक खाली स्ट्रिंग क्या वापस आना चाहिए? – Bergi

+1

मुझे परवाह नहीं है, जब तक कि कार्यक्रम बाहर नहीं निकलता है ... इसके अलावा यदि कोई "शामिल" या समान होगा, तो यह केवल छोटा और सुरुचिपूर्ण होना चाहिए। – Ixx

उत्तर

33

आप निकाल सकते हैं मैच समूहों।

val r = """^myprefix:(.*)""".r 
line match { 
    case r(group) => group 
    case _ => "" 
} 

एक और तरीका है Option का उपयोग कर:

Option(line) collect { case r(group) => group } 
+1

अपडेट किया गया है जो वास्तव में मैं खोज रहा था, धन्यवाद! – Ixx

+0

मैंने अभी यह कोशिश की है, और वैल नाम को अपरकेस (कम से कम स्केल 2.9.2 पर विंडोज़ पर) की आवश्यकता नहीं है –

+0

ओह ठीक है, केवल मैच समूह के बिना ही यह आवश्यक होगा। –

2

कोशिश

r.findFirstIn(line) 

युपीडी: पैटर्न मिलान के माध्यम से

scala> val rgx = """^myprefix:(.*)""".r 
rgx: scala.util.matching.Regex = ^myprefix:(.*) 

scala> val line = "myprefix:value" 
line: java.lang.String = myprefix:value 

scala> for (rgx(group) <- rgx.findFirstIn(line)) yield group 
res0: Option[String] = Some(value) 
+0

लेकिन यह पूरे मैच वापस आती है और मैं समूह चाहते हैं (मेरे मामले में, प्रत्यय) – Ixx

+0

मैं इसे इस तरह से इस्तेमाल कर सकते हैं \t \t \t \t if (! R.findFirstIn (लाइन) .isEmpty) { \t \t \t \t \t \t \t वैल आर (प्रत्यय) = लाइन \t \t \t \t \t \t \t println (प्रत्यय) \t \t \t \t} लेकिन यह अजीब ... – Ixx

+0

ans लग रहा है wer को – viktortnk

27
"""^myprefix:(.*)""".r  // Regex 
    .findFirstMatchIn(line)  // Option[Match] 
    .map(_ group 1)    // Option[String] 

यह लाभ यह है कि आप एक मध्यवर्ती मूल्य r करने के लिए regex आवंटित करने के लिए जरूरत के बिना एक एक लाइनर के रूप में यह लिख सकते हैं है।

यदि आप सोच रहे हैं, तो समूह 0 मिलान की स्ट्रिंग है जबकि समूह 1 आदि कैप्चर समूह हैं।

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