RegEx Problem

  • VB.NET

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

    RegEx Problem

    Hallo @ all

    Ich habe ein Problem mit Regex. Unten seht ihr einen Ausschnitt aus einem Quellcode, aus welchem der Interpret und der Titel ausgelsen werden sollen. Dies soll aber wirklich nur dann ausgelesen werden, wenn es innerhalb eines solchen li steht.

    Quellcode

    1. <li class="track">
    2. <div class="pos" align="center">1 &nbsp;
    3. </div>
    4. <div class="image" style="background-image: url(http://img.zeezee.de/artist/Marlon%20Roudette-40.jpg)">
    5. </div>
    6. <div class="entry">
    7. <a class="artist" href="/artist/537771/Marlon+Roudette">Marlon Roudette</a><br />
    8. <span class="track" title="10343125">New Age</span>
    9. </div>
    10. <div class="icons">
    11. <a title="Weitere Alben dieses Interpreten" href="/artist/537771/Marlon+Roudette#albums"><img src="/images/zeezee/button_list_allalbum.gif" alt="all albums"/></a>
    12. <a title="Weitere Titel dieses Interpreten" href="/artist/537771/Marlon+Roudette/mode/tracks#songs"><img src="/images/zeezee/button_list_allsongs.gif" alt="all songs"/></a>
    13. <a href="#" title="Zu Wunschliste hinzufügen"><img class="btntrans" src="/images/zeezee/button_list_play.gif" onclick="Wishlist.add(this, 'track', 10343125, 'New Age');return false;" alt="" /></a>
    14. <br />
    15. <a title="Bewertung" href="#"><img src="/images/zeezee/starrating_5.gif" alt="" /></a>
    16. </div>
    17. </li>


    Also in Zeile 8 und 9 soller der Titel bzw Interpret ausgelesen werden. Mein Problem ist jetzt das sich die Abfrage über mehrere Zeilen erstreckt. Wie mache ich das genau? Hoffe ihr könnt mir helfen.

    Viele Grüße
    Croasider
    Mit \n, also Zeilenumbrüche in deinem Ausdruck mit abfragen. Oder aber die Option mit RegExOptions.Multiline, da ist dann $ z.B. nicht das Ende eines Strings, sondern das Ende einer Zeile, und ^ nicht der Anfang eines Strings, sondern einer Zeile.

    Auslesen dann einfach über class\=(\"|\')artist(\"|\') .*?\>.*?\<
    mit Track genauso. Danach einfach nur noch mit .*?>|\<.* wegreplacen mit regex.replace.

    link275
    Hello World
    Zum einen gibt es eine MultiLine Option, diese solltest du einmal aktivieren.

    Der Ausdruck um den Artist zu bekommen sollte ungefähr lauten:

    Quellcode

    1. <a\s+class=\"artist\"\s+.*?>([\w\s]+)<\/a>

    Für den Track Title wäre er Ausdruck dann

    Quellcode

    1. <span\s+class="track".*?>([\w\s\d]+)</span>



    Dh. wenn du beides auf einmal ermitteln möchtest, verwendeste eine Kombination aus den Ausdrücken

    Quellcode

    1. <a\s+class=\"artist\"\s+.*?>([\w\s]+)<\/a><br\s+\/>\s+<span\s+class="track".*?>([\w\s\d]+)</span>

    Dies jedoch nur mit aktivierter Multiline Option!


    Dabei ist aber zu beachten, dass dieser Ausdruck nicht vollkommen Fehlerfrei ist, habe ihn kurz ausm Kopf runter geschrieben.
    Das mit dem Interpreten und Titel auslesen ist gar nicht mal das Hauptproblem hierbei. Das hätte ich auch selber hinbekommen.

    Das Problem ist folgendes: Auf der Seite gibt es mehrere dieser Ausdrücke von Interpret und Titel, welche darüber natürlich auch alle gefunden werden. Ich möchte aber nur die finden, welche innerhalb eines

    <li class="track">
    ...
    </li>

    stehen. Das ist im mom mein Problem und da weiß ic nicht wie ich ansetzen soll.