2012-12-12 20 views
5

से शुरू होने वाले प्रत्येक समूह से मेल खाता है। मेरे पास a1wwa1xxa1yya1zz जैसी स्ट्रिंग है।जावा रेगेक्स विशिष्ट स्ट्रिंग

मैं अगले समूह को 1 तक शुरू होने तक प्रत्येक समूह को 1 से शुरू करना चाहता हूं। (मेरे उदाहरण में, मैं होगा: a1ww, a1xx, a1yy और a1zz

अगर मैं का उपयोग करें:।

Matcher m = Pattern.compile("(a1.*?)a1").matcher("a1wwa1xxa1yya1zz"); 
while(m.find()) { 
    String myGroup = m.group(1); 
} 

myGroup कब्जा 1 समूह हर दो समूहों मेरे उदाहरण में
तो, मैं केवल यह कर सकते हैं a1ww और a1yy पर कब्जा।

किसी को भी एक बहुत अच्छा विचार है?

उत्तर

5

स्प्लिट एक अच्छा समाधान है, लेकिन यदि आप रेगेक्स दुनिया में रहना चाहते हैं, तो यहां एक समाधान है:

Matcher m = Pattern.compile("(a1.*?)(?=a1|$)").matcher("a1wwa1xxa1yya1zz"); 
while (m.find()) { 
    String myGroup = m.group(1); 
    System.out.println("> " + myGroup); 
} 

मैंने a1, या वैकल्पिक रूप से लाइन के अंत तक कैप्चर करने के बाद सकारात्मक सकारात्मक उपयोग किया।

लुकहेड शून्य चौड़ाई के दावे हैं, यानी। वे मैच कर्सर को आगे बढ़ाने के बिना एक शर्त सत्यापित करते हैं, इसलिए वे जो स्ट्रिंग सत्यापित करते हैं, वे आगे परीक्षण के लिए उपलब्ध रहते हैं।

+0

धन्यवाद। यह जवाब मेरे लिए अच्छा है क्योंकि मुझे विभाजन के साथ जवाब से मेल खाने के लिए मेरे कोड को संशोधित करने की आवश्यकता नहीं है। इसके अलावा, यह मुझे लुकहेड बेहतर समझ में आया। – ctruchi

3

आप splitted तत्वों के लिए एक उपसर्ग के रूप split() विधि का उपयोग कर सकते हैं, तो "A1" संलग्न:

String str = "a1wwa1xxa1yya1zz"; 
String[] parts = str.split("a1"); 
String[] output = new String[parts.length - 1]; 

for (int i = 0; i < output.length; i++) 
    output[i] = "a1" + parts[i + 1]; 

for (String p : output) 
    System.out.println(p); 

आउटपुट:

a1ww 
a1xx 
a1yy 
a1zz 
+0

उत्तर के लिए धन्यवाद। यह मेरे लिए काफी अच्छा था लेकिन regexp एक लागू करने के लिए सरल/तेज था। – ctruchi

+0

@ user1897948 _split() _ regex पर भी आधारित है। वैसे भी, आप पसंद करते हैं। – Juvanis

+0

@ivanovic आप अपने अलग 'इंडेक्स' चर के बजाय 'i + 1' का उपयोग क्यों नहीं करते? – jlordo

0

मैं इस तरह एक दृष्टिकोण का प्रयोग करेंगे:

String str = "a1wwa1xxa1yya1zz"; 
    String[] parts = str.split("a1"); 
    for (int i = 1; i < parts.length; i++) { 
     String found = "a1" + parts[i]; 
    } 
संबंधित मुद्दे