2009-06-07 15 views
11

Gibt es in Java eine einfache Möglichkeit, eine Teilzeichenfolge zu extrahieren, indem Sie die Trennzeichen für reguläre Ausdrücke auf jeder Seite angeben, ohne die Trennzeichen in die letzte Teilzeichenfolge einzufügen?Java-String - alles zwischen zwei regulären Ausdrücken (aber nicht enthalten)?

Zum Beispiel, wenn ich eine Zeichenfolge wie diese:

<row><column>Header text</column></row> 

was der einfachste Weg ist den Teil zu extrahieren:

Header text 

Bitte beachten Sie, dass der Teil enthält Zeilenumbrüche ..

danke!

Antwort

24

schreiben einen regulären Ausdruck wie folgt aus:

"(regex1)(.*)(regex2)" 

... und ziehen Sie die mittlere Gruppe von der Matcher aus (Zeilenumbrüche in Ihrem Muster, das Sie verwenden möchten Pattern.DOTALL zu handhaben).

mit Ihrem Beispiel können wir ein Programm wie schreiben:

package test; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Regex { 

    public static void main(String[] args) { 
     Pattern p = Pattern.compile(
       "<row><column>(.*)</column></row>", 
       Pattern.DOTALL 
      ); 

     Matcher matcher = p.matcher(
       "<row><column>Header\n\n\ntext</column></row>" 
      ); 

     if(matcher.matches()){ 
      System.out.println(matcher.group(1)); 
     } 
    } 

} 

die, wenn sie laufen druckt:

Header 


text 
+0

@Adam ... nur weil ich Eclipse hochfeuern musste, um ein Beispiel zu bekommen und schnell eine Antwort bekommen wollte;) –

+0

@Aaron: Fair genug. Ich kann auch meinen ersten Kommentar löschen :) Schöne Antwort. – bernie

+0

@Aaron - danke, dein Beispiel funktioniert! Aber bitte könnten Sie mir sagen, welche regulären Ausdruck Muster, um den gleichen Text aus einer Zeichenfolge wie dieser, die einige einfache Anführungszeichen enthält extrahieren? Rubrik \ n \ n \ ntext- Ich habe versucht mit Muster p = Pattern.compile ( " (*.) ", Pattern.DOTALL ); und das Gleiche, aber mit Backslashes vor den Zitaten, aber keiner funktioniert. Sorry, ich bin sehr neu zu regulären Ausdrücken, schätze die Hilfe. Nochmals vielen Dank! Anna –

2

Sie nicht reguläre Ausdrücke verwenden, sollten XML zu entschlüsseln - dies wird schließlich brechen, wenn die Eingabe wird nicht streng kontrolliert.

Die einfachste Sache ist wahrscheinlich, die XML in einer DOM-Baumstruktur zu analysieren (Java 1.4 und neuer enthalten direkt einen XML-Parser) und dann in der Baumstruktur zu navigieren, um herauszufinden, was Sie benötigen.

Vielleicht möchten Sie sagen, was Sie mit Ihrem Programm erreichen möchten?

+1

+1 Sobald Sie einen DOM-Baum haben, können Sie mit XPath die gewünschten Bits herausziehen. –

Verwandte Themen