2016-10-14 6 views
0

Ich versuche, das Tag und den Text zwischen den Tags in einer Textdatei zu extrahieren. Ich versuche dies mit Regex zu erreichen (nicht viele XML-Tags sind da).Extrahieren von Tags und Text zwischen Tags mithilfe von Regex für eine Zeichenfolge mit XML-Tags

unten ist das, was ich

 String txt="<DATE>December</DATE>"; 

     String re1="(<[^>]+>)"; // Tag 1 
     String re2="(.*?)"; // Variable Name 1 
     String re3="(<[^>]+>)"; // Tag 2 

     Pattern p = Pattern.compile(re1+re2+re3,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
     Matcher m = p.matcher(txt); 
     if (m.find()) 
     { 
      String tag1=m.group(1); 
      String var1=m.group(2); 
      String tag2=m.group(3); 
      //System.out.print("("+tag1.toString()+")"+"("+var1.toString()+")"+"("+tag2.toString()+")"+"\n"); 

      System.out.println(tag1.toString().replaceAll("<>", "")); 
      System.out.println(var1.toString()); 
     } 

Als Antwort bisher versucht haben, die ich erhalten:

<DATE> 
December 

Wie kann ich von der <> loswerden?

Antwort

1

Es ist eine schlechte Idee, Regex zum Parsen von XML zu verwenden. Mit einem Regex gibt es keine Möglichkeit, ein vollständiges Element vom Öffnen bis zum schließenden Tag zu identifizieren (ein Regex kann sich eine Anzahl von Ereignissen nicht merken).

jedoch, warum Ihre Regex in diesem speziellen Fall nicht:

In re1, re2, re3 Sie die Erfassungsgruppe wählen schließen < und > (auch schließen Sie nicht die / in re3). Sie könnten einfach diesen

String re1="<([^>]+)>"; // Tag 1 
String re2="([^<]*)"; // Variable Name 1 
String re3="</([^>]+)>"; // Tag 2 

oder eine geeignete regex verwenden ändern < und > Form tag1 zu entfernen:

System.out.println(tag1.toString().replaceAll("<|>", "")); 

oder

System.out.println(tag1.toString().replaceAll("[<>]", "")); 
+0

Es funktioniert. Aber es erkennt keine weiteren Tags im Satz. Beispiel: 'American Airlines Flüge in Dezember gemacht' es erkennt nur TRIPS und 100, aber nicht das nächste Tag – Betafish

+0

@Betafish: '' geschlossen ist nicht von einem '' Tag in Ihrem Beispiel. Wenn Sie das ignorieren möchten, können Sie 're3 ="] +)> "' oder 're3 = re1' verwenden. – fabian

2

Verwenden Sie Regex nicht, um Markup-Syntax wie XML, HTML, XHTML und so weiter zu analysieren.

Many reasons are shown here.

Stattdessen tun Sie sich einen Gefallen und verwenden XPath und XQuery.

+0

ja, die rechte Seite. Aber ich habe nur weniger Tags in meiner Textdatei (max. 10 Tags). Daher Regex. – Betafish

Verwandte Themen