RegEx Verständnisproblem

  • Allgemein

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    ich hab dir im anneren Thread bereits den RegexTester empfohlen.
    Damit sind derlei Ausdrücke in vielfach kürzerer Zeit entwickelt, als wenn man immer Code ändert und neu kompiliert.
    Und ausserdem die Syntax-Referenz und die Regex-Beispiele.
    Und natürlich die Anzeige, welcher Match und welche Gruppe wo im Suchtext matcht.
    Wie schon gesagt, ich habe es mir runtergeladen, aber ich komme damit nicht zurecht, ich sehe nicht mal, wo ich den Satz zum Testen reinschreiben kann (ausser ihn in eine Datei zu schreiben). Ich denke, mir fehlen noch die Grundlagen dazu (ja, ich habe das Tutorial gelesen, aber ich brauche mehr Beispiele).
    Mit diesen Pattern "altroute-info\D+(\d+).+?km" erhalte ich {altroute-info"> <span>262 km}

    Du hast ja im Beitrag 15 geschrieben, dass Du erst sein Pattern benutzt, damit er den String beschneidet, auf "altroute-info"> <span>262 km</span>, <span>2 Stunden 33 Minuten".
    Ich kann leider keine Bilder öffnen und gehe mal davon aus, dass Du einige Bilder verwendet hast in deinen Beiträgen. Es muss ja hier erstmal das Pattern erweitert werden, so dass der String auf "altroute-info"> <span>262 km</span>, <span>2 Stunden 33 Minuten" erweitert wird oder.

    sonne75 schrieb:

    Ich habe es geschafft :) Ich habe erst sein Pattern benutzt, damit er den String beschneidet, auf "altroute-info"> <span>262 km</span>, <span>2 Stunden 33 Minuten". Und dann habe ich innerhalb dieses Strings mit Pattern "(\d+)" gesucht und habe eine MatchCollection mit diesen 3 Zahlen erhalten :thumbsup:


    Das war jetzt schon die Lösung, ich habe keine Bilder genutzt.
    Mit dem ursprünglichen Pattern erhält man in "match.Value" den obengenannten String, dann habe ich pattern auf "(\d+)" gesetzt und nochmal suchen lassen, aber als MatchCollection:

    VB.NET-Quellcode

    1. Dim matches As MatchCollection = Regex.Matches(match.Value, pattern)


    In "matches" stehen dann alle Zahlen hintereinander (ist eine Auflistung), also in meinem Fall in matches(0) steht 262, in matches(1) die 2 und in matches(2) 33. Wenn es unter 1 Stunde dauert, wirst du die Minuten schon in matches(1) haben, d.h. du musst erst matches.Count prüfen.
    Muss mich jetzt wirklich nochmal tief in die Bücher einlesen. Das ist mir alles noch viel zu kompliziert.

    VB.NET-Quellcode

    1. Public Shared Function GetKMDistance(ByVal Startadresse As String, ByVal Zieladresse As String) As Integer
    2. Dim response As String = (New WebClient).DownloadString(String.Format("http://maps.google.de/maps?f=d&hl=de&saddr={0}&daddr={1}&output=html", Startadresse, Zieladresse))
    3. ' innerhalb des Response-Wertes nach folgendem String suchen
    4. ' Fahrt:</td><td align="right" nowrap class="timedist ul">
    5. ' <div class="noprint"><div>136 km
    6. 'Dim pattern As String = "altroute-info\D+(\d+).+?km"
    7. Dim pattern As String = "altroute-info\D+(\d+).+?km"
    8. Dim match = Regex.Match(response, pattern)
    9. Dim matches As MatchCollection = Regex.Matches(match.Value, pattern)
    10. If Not match.Success OrElse match.Groups.Count < 2 Then
    11. Throw New Exception("Anfrage bei GoogleMaps fehlgeschlagen!")
    12. Else
    13. Return Integer.Parse(match.Groups(1).Value)
    14. End If
    15. End Function
    16. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    17. Dim KM As Integer
    18. KM = GetKMDistance(TextBox1.Text, TextBox2.Text)
    19. MsgBox("Die Entfernung beträgt " & KM.ToString() & " KM")
    20. End Sub


    Wenn ich obigen Code verwende, erhalte ich mit dem ursprünglichen Pattern nicht den gewünschten String der auch die Minuten enthält. Der String geht wie bisher genau bis zu den km.

    sonne75 schrieb:

    Wie schon gesagt, ich habe es mir runtergeladen, aber ich komme damit nicht zurecht, ich sehe nicht mal, wo ich den Satz zum Testen reinschreiben kann (ausser ihn in eine Datei zu schreiben). Ich denke, mir fehlen noch die Grundlagen dazu (ja, ich habe das Tutorial gelesen, aber ich brauche mehr Beispiele).
    Reden wir vom RegexTester?
    Weil das ist eiglich kein Tutorial, sondern dort wird ein Regextester-Programm vorgestellt - sogar mit Bildle.
    Und der Satz zum Testen, das nenne ich "ToParse", weil es sich um einen Parse-Vorgang handelt.
    Aber das müsste aus dem Bildle doch auch hervorgehen.