regex abfrage

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    regex abfrage

    Hallo zusammen

    Ich filtere folgendermaßen etwas aus einem Quelltext

    VB.NET-Quellcode

    1. code.Text = WebBrowser2.DocumentText
    2. Dim s As String = code.Text
    3. Dim r As New System.Text.RegularExpressions.Regex("Bytes: (\d+|\d)")
    4. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    5. Dim lbl = {jan_mb1, feb_mb1, mar_mb1, apr_mb1, mai_mb1, jun_mb1, jul_mb1, aug_mb1, sep_mb1, okt_mb1, nov_mb1, dez_mb1}
    6. For i = 0 To lbl.Length - 1
    7. lbl(i).Text = m(2 * i).ToString.Replace("Bytes: ", "") & " MB"
    8. Next


    Der gesuchte Text ist:

    Bytes: 1.13 GB

    Jedoch kriege ich nur "1" als ergebniss raus und nicht 1.13 GB
    Die Richtige Zahl wird jetzt zwar ausgegeben danke.

    Jedoch erhalte ich die zahl mehrmals

    Spoiler anzeigen
    <td><img align="bottom" src="/awstatsicons/other/vu.png" height="45" width="6" alt='Unterschiedliche Besucher: 147' title='Unterschiedliche Besucher: 147' /><img align="bottom" src="/awstatsicons/other/vv.png" height="91" width="6" alt='Anzahl der Besuche: 299' title='Anzahl der Besuche: 299' /><img align="bottom" src="/awstatsicons/other/vp.png" height="80" width="6" alt='Seiten: 38157' title='Seiten: 38157' /><img align="bottom" src="/awstatsicons/other/vh.png" height="91" width="6" alt='Zugriffe: 43296' title='Zugriffe: 43296' /><img align="bottom" src="/awstatsicons/other/vk.png" height="91" width="6" alt='Bytes: 1.13 GB' title='Bytes: 1.13 GB' /></td>


    Ich bräuchte eine der beiden Blauen zahlen

    VB.NET-Quellcode

    1. code.Text = WebBrowser1.DocumentText
    2. Dim s As String = code.Text
    3. Dim r As New System.Text.RegularExpressions.Regex("[0-9]+?.[0-9]+?\sGB|[0-9]+?\sGB")
    4. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    5. Dim lbl = {jan_mb, feb_mb, mar_mb, apr_mb, mai_mb, jun_mb, jul_mb, aug_mb, sep_mb, okt_mb, nov_mb, dez_mb}
    6. For i = 0 To lbl.Length - 1
    7. lbl(i).Text = m(2 * i).ToString.Replace("Bytes: ", "")
    8. Next


    Dazu muss ich noch sagen es kann auch mb da stehen :s
    Da noch andere werte angezeigt wurde, dachte ich mir ich könnte diese hinausfiltern

    VB.NET-Quellcode

    1. code.Text = WebBrowser1.DocumentText
    2. Dim text As String
    3. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("https://www.youtube.com/watch?v=zXA0qJ-DWok")
    4. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    5. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    6. Dim httpContent As String = reader.ReadToEnd
    7. text = httpContent
    8. Dim httpcontent1 As String = "123434534534534" & _
    9. "src1=" & code.text & "" & _
    10. "alt1=""Show releasad3453453453545433456"
    11. Dim Startposition1 As Integer = InStr(httpcontent1, "<td>&nbsp;</td>")
    12. If Startposition1 > 0 Then
    13. 'wir schneiden die ersten 4 zeichen weg, die wir nicht brauchen:
    14. Startposition1 += 1
    15. httpcontent1 = httpcontent1.Substring(Startposition1)
    16. 'Hier jetzt das ende des string suchen, und die sache ist fertig.
    17. Dim Laenge1 As Integer = InStr(httpcontent1, "<td>&nbsp;</td></tr>")
    18. If Laenge1 > 0 Then
    19. 'wir fügen ".jpg" wieder hinzu:
    20. Laenge1 -= 1
    21. 'Anzeigen von dem link:
    22. code.Text = (httpcontent1.Substring(0, Laenge1))
    23. Else
    24. End If
    25. Else
    26. End If
    27. Dim s As String = code.Text
    28. Dim r As New System.Text.RegularExpressions.Regex("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s(GB|MB)|[0-9]+?\s(GB|MB))(?=\')")
    29. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    30. Dim lbl = {jan_mb, feb_mb, mar_mb, apr_mb, mai_mb, jun_mb, jul_mb, aug_mb, sep_mb, okt_mb, nov_mb, dez_mb}
    31. For i = 0 To lbl.Length - 1
    32. lbl(i).Text = m(2 * i).ToString
    33. Next


    jedoch bringt er mir jetzt bei lbl(i) folgenden fehler:
    Ein Ausnahmefehler des Typs "System.ArgumentOutOfRangeException" ist in System.dll aufgetreten.

    Zusätzliche Informationen: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
    @schnibli:: Ich würde die Controls etwas anders benennen, das erleichtert das Finden.

    VB.NET-Quellcode

    1. Dim lbl = {mb_jan, mb_feb, mb_mar, ...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    schnibli schrieb:

    wiso sollen die nicht gut bezeichnet sein?

    RodFromGermany schrieb:

    Ich würde
    Ich würde, nicht aber Du sollst. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was ist

    schnibli schrieb:

    "try catch as "
    :?:
    Das kenn ich nicht. ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin leider immer noch nicht auf die Lösung gekommen -.-

    ("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s(GB|MB)|[0-9]+?\s(GB|MB))(?=\')") 1 Liest er mir aus und beim nächsten steht MB und da bringt er den Fehler.
    Vieleich mal so versuchen:

    VB.NET-Quellcode

    1. ("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s[A-Z]B|[0-9]+?\s[A-Z]B)(?=\')")


    Edit: Nochmal angepasst

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

    Dann kommt ebenfalls ein Fehler -.-

    "Ein Ausnahmefehler des Typs "System.ArgumentOutOfRangeException" ist in System.dll aufgetreten.

    Zusätzliche Informationen: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs."

    Spoiler anzeigen
    <td><img align="bottom" src="/awstatsicons/other/vu.png" height="45" width="6" alt='Unterschiedliche Besucher: 159' title='Unterschiedliche Besucher: 159' /><img align="bottom" src="/awstatsicons/other/vv.png" height="91" width="6" alt='Anzahl der Besuche: 321' title='Anzahl der Besuche: 321' /><img align="bottom" src="/awstatsicons/other/vp.png" height="79" width="6" alt='Seiten: 38380' title='Seiten: 38380' /><img align="bottom" src="/awstatsicons/other/vh.png" height="91" width="6" alt='Zugriffe: 43905' title='Zugriffe: 43905' /><img align="bottom" src="/awstatsicons/other/vk.png" height="91" width="6" alt='Bytes: 1.18 GB' title='Bytes: 1.18 GB' /></td>
    <td><img align="bottom" src="/awstatsicons/other/vu.png" height="31" width="6" alt='Unterschiedliche Besucher: 108' title='Unterschiedliche Besucher: 108' /><img align="bottom" src="/awstatsicons/other/vv.png" height="54" width="6" alt='Anzahl der Besuche: 191' title='Anzahl der Besuche: 191' /><img align="bottom" src="/awstatsicons/other/vp.png" height="51" width="6" alt='Seiten: 24851' title='Seiten: 24851' /><img align="bottom" src="/awstatsicons/other/vh.png" height="57" width="6" alt='Zugriffe: 27445' title='Zugriffe: 27445' /><img align="bottom" src="/awstatsicons/other/vk.png" height="61" width="6" alt='Bytes: 813.42 MB' title='Bytes: 813.42 MB' /></td>

    So geht es 12 verschiedene Angaben
    Ich hatte meinen letzen Post nochmal editiert, hatte [A-Z] vorher mit kleinen Buchstaben geschrieben.

    Hab das mit deinem neuen Quelltext getestet, hab 2 Matches, 1.18 GB und 813.42 MB

    VB.NET-Quellcode

    1. Dim s As String = IO.File.ReadAllText("D:\data.txt")
    2. Dim r As New System.Text.RegularExpressions.Regex("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s[A-Z]B|[0-9]+?\s[A-Z]B)(?=\')")
    3. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    4. For i = 0 To m.Count - 1
    5. MessageBox.Show(m(i).ToString)
    6. Next
    Code:

    VB.NET-Quellcode

    1. Dim s As String = IO.File.ReadAllText("D:\test.txt")
    2. Dim r As New System.Text.RegularExpressions.Regex("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s[A-Z]B|[0-9]+?\s[A-Z]B)(?=\')")
    3. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    4. For i = 0 To m.Count - 1
    5. MessageBox.Show(m(i).ToString)
    6. Next


    Fehler:
    Bild im Anhang

    quellcode:
    Spoiler anzeigen
    <td><img align="bottom" src="/awstatsicons/other/vu.png" height="45" width="6" alt='Unterschiedliche Besucher: 159' title='Unterschiedliche Besucher: 159' /><img align="bottom" src="/awstatsicons/other/vv.png" height="91" width="6" alt='Anzahl der Besuche: 321' title='Anzahl der Besuche: 321' /><img align="bottom" src="/awstatsicons/other/vp.png" height="79" width="6" alt='Seiten: 38380' title='Seiten: 38380' /><img align="bottom" src="/awstatsicons/other/vh.png" height="91" width="6" alt='Zugriffe: 43905' title='Zugriffe: 43905' /><img align="bottom" src="/awstatsicons/other/vk.png" height="91" width="6" alt='Bytes: 1.18 GB' title='Bytes: 1.18 GB' /></td>
    <td><img align="bottom" src="/awstatsicons/other/vu.png" height="31" width="6" alt='Unterschiedliche Besucher: 108' title='Unterschiedliche Besucher: 108' /><img align="bottom" src="/awstatsicons/other/vv.png" height="54" width="6" alt='Anzahl der Besuche: 191' title='Anzahl der Besuche: 191' /><img align="bottom" src="/awstatsicons/other/vp.png" height="51" width="6" alt='Seiten: 24851' title='Seiten: 24851' /><img align="bottom" src="/awstatsicons/other/vh.png" height="57" width="6" alt='Zugriffe: 27445' title='Zugriffe: 27445' /><img align="bottom" src="/awstatsicons/other/vk.png" height="61" width="6" alt='Bytes: 813.42 MB' title='Bytes: 813.42 MB' /></td>


    Ich weis nicht was falsch sein könnte
    Bilder
    • fehler.JPG

      31,63 kB, 645×252, 129 mal angesehen
    Achherje das war das Problem, ich hatte einen Timer den ich zu spät beendete ... Nun Funktioniert es mit den Msgboxen
    Jeoch noch nicht mit meinen Labels:

    VB.NET-Quellcode

    1. Dim s As String = IO.File.ReadAllText("D:\test.txt")
    2. ' Dim s As String = code.Text
    3. Dim r As New System.Text.RegularExpressions.Regex("(?<=title\=\'Bytes: )([0-9]+?.[0-9]+?\s[A-Z]B|[0-9]+?\s[A-Z]B)(?=\')")
    4. Dim m As System.Text.RegularExpressions.MatchCollection = r.Matches(s)
    5. Dim lbl = {jan_mb, feb_mb}
    6. For i = 0 To lbl.Length - 1
    7. lbl(i).Text = m(2 * i).ToString.ToArray
    8. Next


    Zitat:

    Hab den Fehler gefunden:

    VB.NET-Quellcode

    1. lbl(i).Text = m(i).ToString