tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
631
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    majoko majoko ist offline Mitglied
    Registriert seit
    Feb 2011
    Beiträge
    14
    Hi,
    ich hab einen String aus dem ich gerne bestimmte Teile mit Regex auslesen wuerde.
    Leider variiert der String und ist nicht immer gleich lang. Ist dies dennoch moeglich.

    Beispielstring(die Zahlen nach "post_message_" sind manchmal mehr, weniger und unterschiedlich...):


    <div id="post_message_1935262">
    <blockquote class="postcontent restore">
    TEXT[<-ALLES WAS HIER STEHT SOLL AUSGELESEN WERDEN]
    </blockquote>
    </div>


    Danke im Vorraus!

    Edit: Falls das geht waere es super wenn der blockquote Teil auch nicht sein muss (er kommt auch nur manchmal vor) aber kann sodass ich kein if statement brauche...
    Geändert von majoko (28.03.11 um 19:25 Uhr)
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Code :
    1
    2
    3
    4
    5
    6
    
    Match m = Regex.Match(meinString, "id=\"post_message_(?'Zahl'[0-9]+)\"");
    if(m.Success && m.Groups["Zahl"].Sucess)
    {
       int ih;
       int TryParse( m.Groups["Zahl"].Value, out ih);
    }
    So ungefähr, nicht getestet.
    Für Regex Anfänge: http://www.traum-projekt.com/forum/7...pressions.html da hab ich die Anfänge gelernt.
    Der Rest geht dann über msdn: http://msdn.microsoft.com/de-de/libr...=VS.80%29.aspx
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    majoko majoko ist offline Mitglied
    Registriert seit
    Feb 2011
    Beiträge
    14
    Hi,
    danke hab den Teil jetzt hingekriegt aber leider ergibt sich ein neues Problem:
    Und zwar hab ich das Ende des Strings bisher mit "</div>" festgelegt wodurch der String allerdings abegkuerzt wird wenn der gesuchte Teil selber "</div>" beinhaltet.

    Wenn ich also folgedenen String habe:
    HTML-Code:
    <div id="post_message_123456789">
    TEXT ZUM AUSLESEN
    <div>
    MEHR TEXT ZUM AUSLESEN
    </div>
    NOCH MEHR TEXT ZUM AUSLESEN
    </div>
    bekomme ich nur:
    HTML-Code:
    TEXT ZUM AUSLESEN
    <div>
    MEHR TEXT ZUM AUSLESEN
    und der letzte Teil wird ausgelassen.

    Wie kann ich das Ende flexibel gestalten?


    Bisheriger Code:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    Match match = Regex.Match(threadHTML, "<div id=\"post_message_[0-9]*\">");
                    
                        int startIndex = match.Index + match.Length;
                        int endIndex = threadHTML.IndexOf("</div>", startIndex);
                        string String= threadHTML.Substring(startIndex, endIndex - startIndex);
                        String = String.Trim();
     
                        MessageBox.Show(String);
     

  4. #4
    Avatar von Turri
    Turri Turri ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Hallo,

    Wenn div immer dein Ende ist, könntest du von hinten anfangen nach "</div>" zu suchen.
    Code csharp:
    1
    
    int endIndex = threadHTML.LastIndexOf("</div>");
     
    MfG Turri

    PS: Wenn ich helfen konnte, würde ich mich über ein Danke oder eine positive Bewertung freuen. :-)

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von majoko Beitrag anzeigen
    Und zwar hab ich das Ende des Strings bisher mit "</div>" festgelegt wodurch der String allerdings abegkuerzt wird wenn der gesuchte Teil selber "</div>" beinhaltet.
    Kein Problem mit Regulären Ausdrücken.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    using System;
    using System.Text.RegularExpressions;
     
    class Program
    {
        static void Main(string[] args)
        {
            string str = "<div id=\"post_message_1935262\"><blockquote class=\"postcontent restore\">TEXT[<-ALLES WAS HIER STEHT SOLL AUSGELESEN WERDEN]</blockquote></div>";
            string pattern = "^<div id=\"post_message_[0-9]+\">(.*)</div>"$;
            
            Regex rx = new Regex(pattern, RegexOptions.Singleline);
            
            Match m = rx.Match(str);
            
            if(m.Groups.Count > 1)
            {
                Console.WriteLine(m.Groups[1].Value);
            }
        }
    }

    Funktioniert für beide deine Beispiele.

    Du solltest gänzlich auf die String-Operationen (IndexOf, Substring) etc. verzichten, wenn du ohnehin Reguläre Ausdrücke verwendest.
    Geändert von CPoly (30.03.11 um 10:18 Uhr)
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Du könntest dir meinen Wikiparser mal per Reflector anschauen, da suche ich unter anderem auch nach HTML Tags, ev. hilft es dir ja was.
    Hatte schon längst vor den Code mal zu veröffentlichen, aber der liegt aufm anderen Rechner und da ist die Graka kaputt. Einer der Sicherungs USB's liegt im Auto und wo ich den anderen USB Stick hab hab ich vergessen.
    http://wikiparser.iv-interactive.de
    Bin mir nur nicht mehr sicher wie genau ich mit HTML in HTML war.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 06.05.09, 13:53
  2. DIV vertikal zentrieren ohne feste Größe
    Von Eiszwerg im Forum CSS
    Antworten: 8
    Letzter Beitrag: 17.09.08, 17:13
  3. Div ohne feste Größe zentrieren
    Von Avariel im Forum CSS
    Antworten: 2
    Letzter Beitrag: 26.06.05, 21:19
  4. [C] Datei einlesen ohne feste Bezeichnung
    Von darkfire00 im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 26.12.04, 23:19
  5. Feste Fenstergrösse aber ohne Link...
    Von derwuschel im Forum HTML-Editoren
    Antworten: 2
    Letzter Beitrag: 08.06.03, 19:03