Text zwischen zwei Kommentaren (html) mitsamt Kommentaren löschen - RegEx / Replace / Remove oder doch lieber splitten? Hilfe!

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Phenom.

    Text zwischen zwei Kommentaren (html) mitsamt Kommentaren löschen - RegEx / Replace / Remove oder doch lieber splitten? Hilfe!

    Hallo Forengemeinde,

    der Phenom hat mal wieder einen dicken Schlauch unter den Füßen. Könnte mir ein User auf den richtigen Weg helfen und mir damit ein paar Nerven ersparen?
    Die Aufgabenstellung ist eigentlich - zumindest in der Theorie - recht easy. Ich finde nur gerade nicht den passenden Weg, um eine Lösung zu finden.

    Ich versuche eine CSV-Liste automatisiert bearbeiten zu lassen. Dabei wird die Datei Zeile für Zeile eingelesen und mit Split in einzelne Spalten zerlegt.
    Anschließend wird jede Zeile bearbeitet und mit dem Writer in eine andere CSV geschrieben. Im Prinzip lassen sich einfache Änderungen im Text/Code
    recht leicht mit Replace durchführen. Nun hänge ich aber bei einer ganz bestimmten Aufgabe.

    In einer der Spalten steht sehr langer HTML-Code (50.000+ Zeichen) der bereinigt werden muss. Irgendein lustiger Mensch hat gedacht, es ist toll,
    wenn man Galerien mit Inline-Grafiken in den HTML-Code wirft. Diese stehen immer zwischen HTML-Kommentaren.

    Passieren sollte Folgendes:

    - Text (kompletten HTML-Code) in String werfen

    - In String nach folgendem Inhalt A suchen:

    Quellcode

    1. <!-- ICH BIN EIN KOMMENTAR ANFANG xyz._-123 -->


    - In String nach folgendem Inhalt B suchen:

    Quellcode

    1. <!-- ICH BIN EIN KOMMENTAR ENDE xyz._-123 -->


    - ALLES was zwischen A und B liegt, inklusive A und B selbst löschen.

    = Bereinigter Text im String.

    Wie zur Hölle kann ich das am einfachsten und schnellsten lösen?
    Ich sehe mal wieder den Wald vor lauter Bäumen nicht.
    Mit RegEx bin ich nicht so gut vertraut, da ich es so gut wie nie benötige.

    Wäre super, wenn mir jemand auf die Sprünge helfen könnte.
    THX! :love:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. a = Split(Replace("dies ist ein result {das soll weg} das soll nicht weg {aber das soll weg} das wiederum nicht {das weg} das nicht.", "{", "}"), "}")
    3. For i = 0 To UBound(a) Step 2
    4. Result = Result & a(i)
    5. Next
    6. MsgBox(Result)
    7. End Sub
    Hmmm... Danke dir! :)
    Damit komm ich nur gerade nicht klar...

    Nochmal das Beispiel (beide Zeilen stehen im Code in einer Zeile - so ist es nur einfacher zu lesen):

    ICH DARF BLEIBEN <!-- Blub Begin 123 - DO NOT MODIFY --> ICH SOLL MIT RAUS <!-- Blub End 123 - DO NOT MODIFY --> ICH DARF AUCH BLEIBEN
    ICH DARF BLEIBEN <!-- Blub Begin 456 - DO NOT MODIFY --> ICH SOLL MIT RAUS <!-- Blub End 456 - DO NOT MODIFY --> ICH DARF AUCH BLEIBEN


    ICH DARF BLEIBEN = Inhalt in HTML der bleiben soll
    Alles fett markierte = Muss komplett raus
    Der unterstrichene Part = Name und ID der Galerie

    Die Funktion muss nun hergehen und quasi nach <!-- Blub Begin .? - DO NOT MODIFY --> suchen,
    dann nach <!-- Blub End .? - DO NOT MODIFY --> mit der gleichen ID suchen und beide Kommentare, komplett mit allem Inhalt dazwischen entfernen.

    So dass am Ende nur noch das übrig bleibt:


    ICH DARF BLEIBEN ICH DARF AUCH BLEIBEN ICH DARF BLEIBEN ICH DARF AUCH BLEIBEN

    Grübel...
    8|
    Ja, an RegEx hab ich auch gedacht. Nur hab ich damit bisher wenig gearbeitet.

    Sowas hier ging ja noch leicht:

    VB.NET-Quellcode

    1. Public Function HTMLbeseitigen(ByVal Content As String) As String
    2. Return System.Text.RegularExpressions.Regex.Replace(Content, "<.*?>", "")
    3. End Function


    Aber in der oben genannten Sache, komme ich mit dem Pattern absolut nicht klar.
    Gerade deshalb, weil der Inhalt im Kommentar nicht immer gleich ist (Name & ID),
    weil die Blöcke mit unterschiedlichen IDs mehrmals vorkommen können und weil
    ich nicht nur die Kommentare, sondern auch Inhalt dazwischen löschen möchte.

    Egal wie ich es bisher versucht habe, es ist immer ein Problem entstanden.
    Ich seh schon, dass die Lösung einfach ist - ich nur wieder komplett falsch ansetze.
    Den RegExTester guck ich mir auf jeden Fall mal an (für die Zukunft sehr praktisch).
    Danke für den Tipp!