Regex findet Nichts

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Geeorg.

    Regex findet Nichts

    Hallo, ich habe mit Hilfe von Regex versucht aus einem Seitenquelltext einen Wert (in diesem Fall die Länge des Video) auszulesen.

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. Dim matchStr As String = Regex.Match(wc.DownloadString("https://www.youtube.com/watch?v=hnusAvn35rA"), "<span class=""ytp-time-duration"">(.*?)</span>", RegexOptions.IgnoreCase).Groups(1).Value()


    Und denn Wert soll er einfach mal in einer MessageBox mir Anzeigen mit Hilfe von

    VB.NET-Quellcode

    1. MsgBox(matchStr)


    Dennoch bekomme ich eine Leere MessageBox.
    Was mache ich Falsch? ?(

    PS: Der Link ist nur Testweise, kann auch ein X beliebiger YT Link sein. :)
    Moin,

    schalte erstmal Option Strict On, RegEx.Match gibt keinen String zurück und der Ansatz kann dann auch so nicht gehen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade

    Geeorg schrieb:

    VB.NET-Quellcode

    1. ​.Groups(1).Value()


    @Geeorg
    Wenn ich mir den Seitenquelltext angucke, finde ich da gar keine ​ytp-time-duration. Was ich aber finde ist:

    Quellcode

    1. ​<meta itemprop="duration" content="PT14M17S">

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. Dim matchStr As String = Regex.Match(wc.DownloadString("https://www.youtube.com/watch?v=hnusAvn35rA"), "itemprop=""duration"" content=""PT(?<time>(.*?))"">", RegexOptions.IgnoreCase).Groups("time").Value
    3. MsgBox(matchStr)
    Mfg
    Vincent

    Was soll ich denn machen, dass ich denn gewünschten Wert bekomme?


    PS : So habe ich es auch Probiert, dennoch kam dass selbe Ergebnis heraus

    VB.NET-Quellcode

    1. Dim httpwebrequest As HttpWebRequest = httpwebrequest.Create(New Uri("https://www.youtube.com/watch?v=hnusAvn35rA"))
    2. Dim HttpWebResponse As HttpWebResponse = DirectCast(httpwebrequest.GetResponse(), HttpWebResponse)
    3. Dim html As String = New StreamReader(HttpWebResponse.GetResponseStream()).ReadToEnd
    4. Dim regex As New Regex("<span class=""ytp-time-duration"">(.*?)</span>")
    5. Dim Matches As MatchCollection = regex.Matches(html)
    6. Dim leange As String = ""
    7. For Each laenge As Match In Matches
    8. leange = laenge.Value
    9. Next
    10. MsgBox(leange)




    Doch


    @VincentTB Doch, schau mal :



    HTML-Quellcode

    1. <div class="ytp-time-display html5-control" aria-hidden="true"><span class="ytp-time-current">0:00</span><span class="ytp-time-separator"> / </span><span class="[b]ytp-time-duration[/b]">14:16</span><span class="ytp-time-live-badge">Live</span></div>



    Woher sollen wir das wissen? Vielleicht hast du an irgendeinem Programm teilgenommen (der neue Media Player). Es wäre sowieso wesentlich besser, wenn du die offizielle API nutzen würdest. Weil sowas ändert sich halt dauernd, kann sein, dass das nächsten Monat nicht mehr funktioniert.
    Mfg
    Vincent

    Ah, könnte sein.
    Aber wenn ich z.B denn Quelltext in eine RichTextBox einspielen lasse, finde ich dann

    VB.NET-Quellcode

    1. <span class="video-time">
    , aber da findet er auch dann nichts ? ?(

    @VincentTB

    Oh, habe dein Post übersehen. Warum auch immer, das bei dir geht. Und bei mir jetzt auch (über deine RegExp).

    Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Geeorg“ ()