Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1
    Fortgeschrittener
    Registriert seit
    06.10.2007
    Beiträge
    34

    Standard C# String durchsuchen

    Hallo @all,
    ich bin gerade dabei zu versuchen einen Quellcode nach etwas bestimmten zu durchsuchen.
    Den Quellcode einer Seite habe ich schon als String vorliegen.
    Nun versuche ich gerade aus dem String bestimmte Inhalte zu bekommen aber bin am scheitern.
    Denn ich möchte z.B. den Inhalt der zwischen 2 Tags steht, z.B.:
    <li style="margin-bottom: 1em;margin-left:0px">TESTDATEN</li>
    Daraus möchte ich "TESTDATEN" haben.
    Ich habe auch schon versucht mit String StartsWith und EndsWith was zu basteln aber leider ohne Erfolg.
    Und mit RegEx habe ich es auch schon versucht nur um da etwas richtiges zu basteln habe ich mir gedacht dass es sicherlich einfacher geht in dem man etwas mit der String Klasse macht.

    Ich würde mich über Hilfe und Antworten freuen.
    Vielen Dank schon mal.

    See Ya!

  2. #2

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Ganz einfach, mit indexOf den Anfang und das Ende suchen und dann mit substr auslesen.

    Pseudocode:
    Code:
    start=s.indexof(<anfang>);
    if(start>-1){
      start+=<anfang>.length;
      stop=s.indexof(<ende>,start);
      if(stop>-1) result=s.substr(start,stop-start);
    }
    Aber ein regulärer Ausdruck wäre hier angemessen.
    (Einfach TESTDATEN durch (.+?) ersetzen)

  3. #3
    Fortgeschrittener
    Registriert seit
    06.10.2007
    Beiträge
    34

    Standard

    Danke für die Antwort.
    Hm wenn du sagst das RegEx besser wäre in dem Fall könntest du mir da sagen wie ich das richtig mache?
    Denn ich habe folgendes versucht was aber nicht klappt (Dein RegEx mit einbezogen):

    Regex match = new Regex("(?<=li style=\"margin-bottom: 1em;margin-left:0px\">) (.+?) (?=</li>)");

    Text = match.Match(HTML).ToString();

    richTextBox1.Text = Text;

    In der Variable HTML befindet sich mein Quellcode den ich durchsuchen will.

    Denn ich habe gedacht dass er damit nach dem li Tag sucht und mir dann den Inhalt gibt, was aber nicht klappt.

    Vielen Dank schon mal.
    See Ya!

  4. #4

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Du musst auch die Gruppe auslesen:
    Code:
    Regex r = new Regex("<li style=\"margin-bottom: 1em;margin-left:0px\">(.+?)</li>");
    Match m = r.Match(HTML);
    if(m.Success) richTextBox1.Text = m.Groups[1].Value;

  5. #5
    Fortgeschrittener
    Registriert seit
    06.10.2007
    Beiträge
    34

    Standard

    Ah ok danke.
    Ich habe es jetzt so versucht wie du sagtest nur dann bekomme ich ein leeres Resultat zurück.
    Ich bin auch mit dem Debugger durch gegangen und habe gesehen das die <li> Tags alle entfernd wurden.
    Und das m.Success gibt somit false zurück.
    Im grunde versuche ich ja einfach nur alle Inhalte der <li> Tags auszulesen die ich in dem Quellcode der jeweiligen Internetseite finde.

    Vielleicht habe ich ja irgentwo anders noch ein Fehler darum poste ich mal das was ich bis jetzt habe.

    Code:
    string url = "http://www.URL.de";
    string HTML = "";
    string Text = "";
    WebRequest req = WebRequest.Create(url);
    WebResponse resp = req.GetResponse();
    Stream stream = resp.GetResponseStream();
    StreamReader sr = new StreamReader(stream);
    
    string s = sr.ReadToEnd();
    HTML = s;
    
    Regex r = new Regex("<li style=\"margin-bottom: 1em;margin-left:0px\">(.+?)</li>");
    Match m = r.Match(HTML);
    if(m.Success) richTextBox1.Text = m.Groups[1].Value;
    Ich weiß absolut nicht wo der Fehler noch sein kann.
    Über weitere Hilfe wäre ich sehr dankbar.

    See Ya!

  6. #6

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Der Code ist korrekt. Es scheint so, als wenn der reguläre Audruck nicht auf den Quelltext der Seite passt. Am besten nennst du uns mal die Seite und/oder den Quelltext der Seite (bzw. einen Auszug) und die Stelle(n), die du genau auslesen möchtest.

    Btw. wenn du allgemein alle li-Tags matchen möchtest, kannst du auch mal folgendes probieren:
    Code:
    Regex r = new Regex("<li.*?>(.+?)</li>");
    foreach(Match m in r.Matches(HTML))
      MessageBox.Show(m.Groups[1].Value);

  7. #7
    Fortgeschrittener
    Registriert seit
    06.10.2007
    Beiträge
    34

    Standard

    Hallo, danke für deine Antwort.
    Ich habe es so versucht aber ich bekomme dann keine Messageboxes komischerweise.
    Also es geht um folgende Seite bzw. Url:

    string url = "http://www.meinestadt.de/berlin/telefonbuch/suche?vorname=martin&name=&strasse=&formtype=detai lsuche";

    Wobei ich jetzt "Berlin" und "Martin" nur als Test eingetragen habe.
    Ich bekomme dann den kompletten Quellcode der Seite und auch Suchergebnisse sind mit dabei.
    Die Suchergebnisse sind dann in <li> Tags wie z.B. der Name, Straße usw.

    Ich hoffe du oder jemand anders kann mir da weiter helfen.
    Vielen Dank schon mal.

    See Ya!

  8. #8

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Also mit <li> sehe ich da nichts...

    Name, Straße usw. kannst du aber so auslesen:
    Code:
    Regex r = new Regex("<a class=\"katalogtitel\".+?>(.+?)</a>\\s*</div><div class=\"mt-ms_address\">\\s*(.+?)\\s*<br/>\\s*(.+?)\\s*</div>");
    foreach (Match m in r.Matches(HTML))
      MessageBox.Show(m.Groups[1].Value + '\n' + m.Groups[2].Value + '\n' + m.Groups[3].Value);
    (getestet und funktioniert)

  9. #9
    Fortgeschrittener
    Registriert seit
    06.10.2007
    Beiträge
    34

    Standard

    Ah cool danke.
    Aber doch weiter unten sind die <li> Tags, denn dein RegEx gibt im Moment nur die oberen Sachen aus was aber Branchen sind.
    Weiter unten im Quellcode ca. bei 3/4 sind die <li> Tags die, die normalen Leute beinhält und die brauche ich halt.

    Wäre super wenn du mir dabei noch helfen würdest.
    Vielen Dank schon mal.

  10. #10

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Ach, hast Recht, das habe ich so schnell gar nicht gesehen

    Das müsste jetzt so aussehen, wobei dieser Pattern nur matcht, wenn alle Angaben vorhanden sind; wenn du das nicht möchtest, kannst du die entsprechenden Gruppen mit einem ? optionalisieren.
    Code:
    Regex r = new Regex("<li.*?>\\s*<a.*?>\\s*(.+?),\\s*<b>(.+?)</b>\\s*</a><br>\\s*(.+?),\\s*(.+?),\\s*<b>Tel\\.:\\s*(.+?)</b>\\s*<br>\\s*</li>");
    foreach (Match m in r.Matches(HTML))
      MessageBox.Show(m.Groups[1].Value + '\n' + m.Groups[2].Value + '\n' + m.Groups[3].Value + '\n' + m.Groups[4].Value + '\n' + m.Groups[5].Value);

  11. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Devil589 (07.12.2010)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Seiten durchsuchen
    Von maLL im Forum Webmaster
    Antworten: 1
    Letzter Beitrag: 15.02.2010, 23:01
  2. [C#] String durchsuchen unabhängig von Groß/Klein-Schreibung
    Von cocacola im Forum .NET Sprachen - Techniken
    Antworten: 6
    Letzter Beitrag: 09.06.2009, 11:30
  3. [Vb6] String durchsuchen und ausgeben
    Von AllesFAM im Forum VisualBasic
    Antworten: 0
    Letzter Beitrag: 31.01.2009, 12:28
  4. Uploadserver durchsuchen!
    Von Suicide im Forum Biete Tutorials
    Antworten: 2
    Letzter Beitrag: 21.05.2006, 19:18

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •