C# Regex falsche Expression?

PapstRatze

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
436
Tag,

hab heute morgen zum ersten mal Regex genutzt und frage mich schon fast wie ich ohne leben konnte:freak:. Leider hab ich noch so meine schwächen mit den Expression, obwohl ich die meisten Sachen hinbekommen habe, funktioniert der letzte Schritt nicht.

Im Programm zerlege ich eine HTML page und möchte dort Links zu youtube-Videos und die Beschreibung raus ziehen. Die youtube-Videos bekomme ich alles schön fein säuberlich. Jetzt muss ich noch die Beschreibung raus ziehen. Ich weiß, dass vor jeder Beschreibung drei Tabs eingefügt sind ( \t ), dann beginnt der Text. Ergo habe ich folgendes Regex erstellt:

Code:
Regex reg = new Regex(@"(?<=\\?t\\?t\\?t).*?");

Ich hab auch schon einige andere verschiedene Sachen ausprobiert, aber er will einfach nichts finden...
 
Äh, ja, schau dir deinen Ausdruck mal nochmal genauer an :D

Tab ist \t wie du ja selbst schreibst...
 
??? meinst du etwa ich sollte \t schreiben ??? ... Danke für die Antwort.... :evillol:

\t steht zwar für Tab, aber da ich aus einem string lese und im string \t steht, kann ich es so nicht auslesen, ich will tatsächlich die Zeichenkette "\t " als Match suchen.
\\ steht für \

#EDIT: Aber sei dir getrost ich hab es zum Spaß auch mal ausprobiert und es funktioniert nicht ;)
 
Ich hab mir jetzt mal ein kleines Java Proggi geschrieben, wo ich die Problematik nachvollziehen kann.

Folgender RexEx matcht bei mir:

"\\\\t\\\\t\\\\t.*"

Alle Zeilen, die mit "\t\t\t undsoweiter" beginnen. Sehr eigenartig. Es könnte sein, dass der erste Backslash den Backslash im String escaped, sodass aus 4 nur noch 2 werden. Dann wird beim compilieren des patterns noch die beiden zu einem gemerged. Naja. Probier es mal aus.
 
Also schön, dann hab ich das ganze nochmal in C# gemacht, hier aber keine Auffälligkeiten festgestellt:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            String pattern = "\t\t\t";
            String test = "\t\t\t Test";

            Regex r = new Regex(pattern);
            Match m = r.Match(test);

            if (m.Success){
                System.Diagnostics.Debug.WriteLine("Passt.");
                System.Diagnostics.Debug.WriteLine("Rest des Textes ist: "+test.Substring(m.Index+pattern.Length+1));
            }
            else
                System.Diagnostics.Debug.WriteLine("Passt nicht.");

        }
    }
}

Ergebnis Ausgabe:

Passt.
Rest des Textes ist: Test
 
Okay, ja tatsächlich funktioniert es so, wobei der erste Buchstabe abgeschnitten wird, aber das liegt einfach nur an dem +1, was du wegen des Leerzeichen in deinem Beispiel genommen hattest.

Es ist natürlich jetzt ein etwas andere Weg, statt lookahead bzw lookbehind , aber es soll mir recht sein. Das schlimmste für mich kommt eh noch die Tage... XAML ist nicht mein Favorit ;)

#EDIT: Achso for Freude hätte ich fast das Danke vergessen ;).
 
Zuletzt bearbeitet:
Zurück
Oben