Regex Problem

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von OneWorld.

    Regex Problem

    Guten Abend,

    Ich habe zurzeit ein Problem mit Regex. Undzwar wollte ich eine belibige Wikipedia Seite auslesen. Das gestaltet sich als etwas schwierig, da in den einzelnen Textpasagen haufen von Links eingefügt wurden. Ich habe meinen Pattern jetzt mal soweit, dass er mir den Text teilweise ausgibt(warum auch immer nicht ganz), nur jetzt ist in dem ausgegebenen Text immer noch der Html Code für Links drinne. Nun zu meiner Frage wie kann ich den ganzen Text ausgeben lassen und unerwünschte Funktionen, wie die Links rausfiltern.

    Hier mal das was ich schon habe :



    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.Text.RegularExpressions
    3. Imports System.Net
    4. Imports System.IO
    5. Public Class Form1
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://de.wikipedia.org/wiki/Mathematik")
    8. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse
    9. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    10. Dim httpContent As String = reader.ReadToEnd
    11. Dim txtSourcecode As String = httpContent
    12. Dim regex As New Regex("<p\>(?<string>(.*))\<\/p\>", RegexOptions.Compiled Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
    13. Dim Info As String = regex.Match(httpContent).Groups("string").ToString
    14. RichTextBox1.Text = Info
    15. End Sub
    16. End Class




    Gruß OneWorld
    Youtube Info Library 2013 jetzt im Showroom.

    VB.NET-Quellcode

    1. Dim wc As New WebClient()
    2. wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1")
    3. wc.DownloadString("http://de.wikipedia.org/w/index.php?title=Mathematik&action=edit")

    Oder deinem Webrequest per

    VB.NET-Quellcode

    1. blubeldiblub.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"

    nen User-Agent geben ^^
    Also ich hab das ganze jetzt so gemacht

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim wc As New WebClient()
    3. wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1")
    4. Dim page As String = wc.DownloadString("http://de.wikipedia.org/w/index.php?title=Mathematik&action=edit")
    5. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(page)
    6. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse
    7. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    8. Dim httpContent As String = reader.ReadToEnd
    9. Dim txtSourcecode As String = httpContent
    10. Dim regex As New Regex("<\textarea\>(?<string>(.*))<\/textarea\>")
    11. Dim Info As String = regex.Match(httpContent).Groups("string").ToString
    12. RichTextBox1.Text = Info
    13. End Sub


    Nur da kommt dann "Ungültiger URI: Das URI-Schema ist ungültig."
    Youtube Info Library 2013 jetzt im Showroom.

    VB.NET-Quellcode

    1. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create(page)
    2. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse
    3. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    4. Dim httpContent As String = reader.ReadToEnd
    5. Dim txtSourcecode As String = httpContent

    Den Teil einfach mal auskommentieren oder direkt löschen, die DownloadString-Methode gibt bereits den kompletten Quelltext der Seite aus.
    Und mit dem Regex-Pattern wird das nichts, denn

    Quellcode

    1. <textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" lang="de" dir="ltr" name="wpTextbox1">
    Ich hab das jetzt mal zu demgeändert

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim wc As New WebClient()
    3. wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1")
    4. Dim page As String = wc.DownloadString("http://de.wikipedia.org/w/index.php?title=Mathematik&action=edit")
    5. Dim regex As New Regex("<textarea readonly="" accesskey="","" id=""wpTextbox1"" cols=""80"" rows=""25"" style="" lang=""de"" dir=""ltr"" name=""wpTextbox1"">""(?<string>(.*))""")
    6. Dim Info As String = regex.Match(page).Groups("string").ToString
    7. RichTextBox1.Text = Info
    8. End Sub


    Aber irgendwie bleibt die RichTextbox leer.
    Youtube Info Library 2013 jetzt im Showroom.

    OneWorld schrieb:

    Aber irgendwie bleibt die RichTextbox leer.

    Moin,

    hier noch ein möglicher Ansatz!
    Diesmal wieder die reine URL und nicht die Edit-Seite (TextArea).
    Es ist eine Mischung zwischen Split und RegEx.
    Den Split-Teil könnte man auch mit RegEx realisieren, wenn man denn könnte - ich kanns nicht :whistling: ..

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. Imports System.Text.RegularExpressions
    4. Imports System.Net
    5. Public Class frmMain
    6. Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
    7. Dim wc As New WebClient
    8. wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0")
    9. wc.Encoding = System.Text.Encoding.UTF8
    10. RichTextBox1.Text = Regex.Replace(Split(Split(wc.DownloadString(TextBoxURL.Text), "<!-- content -->")(1), "<!-- /content -->")(0), "<(.|\n)*?>", String.Empty)
    11. End Sub
    12. End Class

    Na jedenfalls geht es (siehe Screenshot und Dateianhang).
    Es berücksichtigt den Teil im Quelltext, der zwischen den HTML-Kommentaren "<!-- content -->" und "<!-- /content -->" steht.



    LG,
    Bruno
    Dateien