Reguläre Ausdrücke - HTML - zu TXT



  • Hallo Freunde, ich versuche gerade, alle Tags eines Wikipediaeintrags zu entfernen, sodass eine einfache Textdatei übrigbleibt. Ich habe hierzu eine HTML-Datei von Wikipedia heruntergeladen und durch mein Programm gejagt.
    Doch die Tags werden nicht ordnungsgemäß entfernt. Stattdessen kommt da nur Unsinn bei raus. Wo liegt mein Denkfefhler?

    import java.util.Scanner;
    import java.io.File;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.io.IOException;
    import java.nio.file.Path;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class Reg {
    	public static void main(String[] args)  throws Exception {
    		File file = new File("test.html");
    		Path path = Paths.get(args[0]);
    		byte[] raw = Files.readAllBytes(path);
    		String text = new String(raw, "UTF8");
    		text = text.replaceAll("<script.*>.*</script>", "");
    		text = text.replaceAll("<.*>", "");
    		text = text.replaceAll("</.*>", "");
    		PrintWriter output = new PrintWriter("test.txt");
    		output.print(text);
    	}
    }
    


  • Wahrscheinlich wegen ".*" - lies dir mal What is the difference between .? and . regular expressions? durch.





  • MFK schrieb:

    HTML kann man nicht mit regulären Ausdrücken parsen.

    https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

    klarerweise kann man das nicht mit regulären Ausdrücken, stehen Regex und HTML ja auf einer anderen Chomsky "Stufe". Reguläre Ausdrücke sind endliche Automaten, und diesen fehlt ganz einfach das Gedächtnis, um hierarchische Strukturen zu erfassen (z.B. wie "tief" bin ich im HTML Baum jetzt schon nach unten gegangen).

    Trotzdem sehe ich kein Problem, reguläre Muster innerhalb von HTML zu suchen, und dazu gehören öffnende und schließende Tags mit irgendwelchen Zeichen dazwischen. Ich bin zwar nicht in der Lage, die hierarchische HTML Struktur mit Regex zu erfassen, jedoch kann man zusammengehörende Tags finden und diese dann manipulieren.



  • zusammengehörende Tags finden und diese dann manipulieren.

    Wie soll das gehen ohne Tag Tief und "gedächtnis"!?


  • Global Moderator

    fdsfsfsdf schrieb:

    Trotzdem sehe ich kein Problem, reguläre Muster innerhalb von HTML zu suchen, und dazu gehören öffnende und schließende Tags mit irgendwelchen Zeichen dazwischen. Ich bin zwar nicht in der Lage, die hierarchische HTML Struktur mit Regex zu erfassen, jedoch kann man zusammengehörende Tags finden und diese dann manipulieren.

    Dann gib doch mal einen Ausdruck an, der alle Überschriften aus einem Dokument ermittelt. Sollte doch ganz einfach sein.

    <!DOCTYPE html>
    <html>
    <body>
    <textarea>
    <!DOCTYPE html>
    <html>
    <body>
    <h1>Fake oder echt?</h1>
    </body>
    </html>
    </textarea>
    </body>
    </html>