RegEx bestimmten Text aus Quellcode anzeigen lassen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    RegEx bestimmten Text aus Quellcode anzeigen lassen

    Guten Abend Zusammen,

    ich scheitere aktuell an RegEx habe mich hier im Board und auch bei google schon versucht aber komme nicht weiter. Ich weiss nicht welche pattern ich anwenden muss.

    Ich möchte eine Zahl aus folgenden Quellcode auslesen:

    HTML-Quellcode

    1. <a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- MIRKO</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(31</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-82)</span></span><span class='clear'> </span>" href="?newdid=26350" class=""><img src="x.gif"/>- MIRKO</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(31</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-82)</span></span><span class='clear'> </span></li><li class="entry " title="">
    2. <a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- REVENGE</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-73)</span></span><span class='clear'> </span>" href="?newdid=25354" class=""><img src="x.gif"/>- REVENGE</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-73)</span></span><span class='clear'> </span></li><li class="entry " title="">
    3. <a id="" title="<span class='coordinates coordinatesWithText coordinatesLTR'><span class='coordText'>- SPORT CLIPS</span><span class='coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-72)</span></span><span class='clear'> </span>" href="?newdid=25355" class=""><img src="x.gif"/>- SPORT CLIPS</a><span class='coordinates coordinatesWrapper coordinatesAligned coordinatesLTR'><span class='coordinateX'>(26</span><span class='coordinatePipe'>|</span><span class='coordinateY'>-72)</span></span><span class='clear'> </span></li><li class="entry " title="">



    Genau die "26350" und die weiteren ID´s im Quelltext in dem Fall 25354 und 25355 möchte ich auslesen

    HTML-Quellcode

    1. </span>" href="?newdid=26350" class=""><img src="x.gif"/>


    und nutze dafür folgenden Code:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Dim r As New System.Text.RegularExpressions.Regex(" href=""?newdid="".*"" class=""><img src=""x.gif""/>")
    3. Dim matches As MatchCollection = r.Matches(RichTextBox1.Text)
    4. For Each itemcode As Match In matches
    5. ListBox1.Items.Add(itemcode.Value.Split("""").GetValue(1))
    6. Next
    7. End Sub


    In meiner Listbox wird jedoch garnichts angezeigt. Wäre super wenn Ihr mich unterstützen könnt.

    Gruß
    Jan :)
    Hi,

    siehe folgendes Live Beispiel:

    regex101.com/r/gbVOID/1

    Auf die Ergebnisse kannst du über das zurückgegebene Array dann mit "id" zugreifen, wie das mit VB klappt solltest du fix rausgefunden haben (ich schreibe grad nur über's Smartphone)

    Link
    Hello World
    Hi,

    klar. Also die erste Gruppe (das in den Klammern) ist ein positiver Lookbehind (das ?<=, siehe auch rexegg.com/regex-lookarounds.html) der quasi festlegt was vor dem eigentlichen Match vorkommen muss. Das eigentliche Match ist ja die zweite Gruppe. Der Lookbehind selbst wird nicht in ein Match mitbeinbezogen (wird nicht "gecaptured").
    Dass in der zweiten Gruppe noch ?<id> steht heißt, dass wir nicht extra durchzählen müssen sondern dass wir auf das Ergebnis im Array via assoziativem Index - also per Name - zugreifen können.

    Durchzählen heißt in dem Fall, dass auf Gruppen normalerweise numerisch zugegriffen wird - siehe dieses Beispiel: regex101.com/r/Tx9LdD/1 Gruppe 1 hält den Namen des öffnenden Tags, Gruppe 2 den Inhalt und Gruppe 3 den Namen des schließenden Tags (was in dem Fall Redundant ist weil Gruppe 1 und 3 immer gleich sein werden). Mit jeder neuen öffnenden Klammer startet eine Gruppe, wird also einfach von links nach rechts gelesen und so gezählt. Was du in Gruppe 3 siehst (\1) ist eine sog. "Backreference" die besagt, dass hier genau das steht was in Gruppe 1 gefunden wurde. Bei der Ersetzung kannst du ebenfalls auf die Gruppen referenzieren, diesmal anstatt mit Backslash aber mit $, also für Gruppe 2 dann $2 - siehe dieses Beispiel mit Ersetzung: regex101.com/r/Tx9LdD/2
    Mit $0 kannst du dann noch das gesamte Match referenzieren (siehe regex101.com/r/Tx9LdD/3).

    Im Gegensatz zum positiven Lookbehind gibt's das negative Lookbehind, welches das Gegenteil tut. Das heißt, "finde den Text nur, wenn etwas bestimmtes nicht direkt vorher vorkommt". Ein Beispiel: regex101.com/r/Xq8XxP/1 Hier siehst du, dass das "b" nur gefunden wird, wenn nicht "a", "e", "i" "o" oder "u" davor stehen.

    Der Pattern ist selbst geschrieben, es gibt schon auch Generatoren, oft sind die aber mMn unhandlich in der Benutzung. Ich fand auch nie dass solche Tools in irgendeiner Form hilfreich oder praktisch sind um RegEx tatsächlich zu lernen. However, den besten den es gibt und den ich kenne ist der RegexBuddy (sieht so aus), hat vielerlei Features und erklärt dir deinen Pattern (ähnlich wie auch regex101 das macht, nur eben um einiges umfangreicher).

    Link
    Hello World

    Dieser Beitrag wurde bereits 21 mal editiert, zuletzt von „Link“ ()

    Hi,

    ich hab' hier vor Urzeiten mal ein Tutorial geschrieben (RegEx Tutorial - Blutige Anfänger und Fortgeschrittene), womöglich hilft dir das.
    Ansonsten ist regular-expressions.info/ und rexegg.com/ (s. auch die Referenz) zum Lernen recht gut. Gibt auch andere deutsche Tutorials wie das hier.
    Um reguläre Ausdrücke zu testen finde ich persönlich regex101.com/ am besten.


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Link“ ()