2011-08-17 12 views
5

मेरे पास एक टेक्स्ट है और इसे शब्दों में विभाजित करने के लिए इस सरल रेगेक्स का उपयोग करना: [ \n]। यह टेक्स्ट को रिक्त स्थान और लाइन-ब्रेक का उपयोग करके शब्दों में विभाजित करता है।रेगेक्स का उपयोग करके टेक्स्ट को कैसे विभाजित करें, लेकिन विभाजित शब्द रेगेक्स विभाजक को जारी रखते रहेंगे?

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

मैं String#split विधि का उपयोग कर रहा हूं।

+0

क्या आपके \ n का मतलब कुछ विशेष (वाक्य का अंत) है? आप "।" के साथ कई पंक्तियों पर सामान्य पैराग्राफ संसाधित नहीं कर रहे हैं। वाक्य के अंत के रूप में? – toto2

+0

@ toto2 विराम चिह्न का उपयोग वाक्य के अंत को निर्धारित करने के लिए भी किया जाता है, लेकिन सामग्री HTML सामग्री से आती है, इसलिए शीर्षक जैसे कई वाक्यों में विराम चिह्न नहीं होता है कि वाक्य कहां समाप्त होता है, केवल लाइन ब्रेक होता है। –

+0

मुझे यकीन नहीं है कि आपको HTML पर प्रोसेस करते समय \ n पर भरोसा करना चाहिए, क्योंकि आपके पास एक सिंगल \ n के बिना बिल्कुल सही दस्तावेज़ हो सकता है। – toto2

उत्तर

7

आप (+1) @Piotr Findeisen रूप lookbehind उपयोग कर सकते हैं सुझाव:

public class RegexExample{ 
    public static void main(String[] args) { 
    String s = "firstWordWithSpaceAfter secondWordWithSpaceAfter wordWithLineBreakAfter\nlastWord"; 
    String sa[] = s.split("(?<=[ \\n])"); 
    for (String saa : sa) 
     System.out.println("[" + saa + "]"); 
    } 
} 

आउटपुट:

[firstWordWithSpaceAfter ] 
[secondWordWithSpaceAfter ] 
[wordWithLineBreakAfter 
] 
[lastWord] 

लघु विवरण:

?<= पीछे देखो है, जिसका अर्थ है कि आप एक मिल गया अगर आप जिस अभिव्यक्ति की तलाश कर रहे हैं उससे पहले डेटा ?<= के बाद आने वाले रेगेक्स के बराबर है (इस मामले में [ \\n])

[ \\n] regex []

में वर्णों की एक मतलब यह है कि है, इसलिए पूरे regex विभाजन हर बार है कि अभिव्यक्ति/शब्द से पहले चरित्र या तो अंतरिक्ष या \n है कहते हैं।

चूंकि हमने अंतरिक्ष या \n से मिलान करने का प्रयास नहीं किया है, इसलिए यह उन्हें नहीं हटाएगा।

+0

यह काम पर प्रतीत होता है, लेकिन ... क्या आप रेगेक्स को समझा सकते हैं? –

+0

@Renato Dinhani Conceição - मैं एक regex विशेषज्ञ नहीं हूँ, लेकिन मुझे आशा है कि वह संपादन पर्याप्त स्पष्ट है। – MByD

+0

आपने अपना रेगेक्स को ब्रांड्स के अंदर रखा है। यह ज़रूरी है? –

5

शून्य-चौड़ाई सकारात्मक दिखने/लुकहेड का उपयोग करने पर विचार करें। देखें Pattern javadocचारों ओर विशेष निर्माणों (गैर कैप्चरिंग)

0

मुझे लगता है कि अपने ही एकमात्र विकल्प इस तरह कुछ करने के लिए है:

String myString = "Joe Blow\n1234 Fake Road\nHere, There, 12345"; 
String[] lines = myString.split("\\n"); 
Set<String[]> wordsByLine = new LinkedHashSet<String[]>(); 
for (String line : lines) { 
    wordsByline.add(line.split(" ")); 
} 
0

अगर regex हमेशा मिलान किया गया था, मेरे सिर के ऊपर से वास्तव में जल्दी से एकल पात्र, आप यह निर्धारित करने के लिए लंबाई का उपयोग कर सकते हैं कि वे मूल स्ट्रिंग में कहां बैठे थे। फिर आप सीमित चरित्र के लिए एक सबस्ट्रिंग ले सकते हैं।

बिट गंदे, लेकिन चाल चलनी चाहिए।

-1

मुझे अभी भी यकीन नहीं है कि आप क्या करने का प्रयास कर रहे हैं, लेकिन यदि \ n का अलग अर्थ है, तो आपको अलग से निपटना चाहिए।

String[] sentences = text.split("\\n"); 
... 
for (String sentence : sentences) { 
    ... 
    String[] words = sentence.split(" "); 
    ... 
} 
संबंधित मुद्दे