Laden...

Regex: Dateiglobs * und ? in Regex simulieren

Erstellt von lord_fritte vor 13 Jahren Letzter Beitrag vor 13 Jahren 711 Views
L
lord_fritte Themenstarter:in
553 Beiträge seit 2007
vor 13 Jahren
Regex: Dateiglobs * und ? in Regex simulieren

Hallo, ich möchte mit Regex Typen aus einer Assembly filtern, Beispiel:


static bool Match(string str, string pattern)
    {
      //pattern = pattern.Replace("?", ".?");
      //pattern = pattern.Replace("*", ".*");
      Regex regex = new Regex(pattern);
      return regex.IsMatch(str);
    }

    static void Main(string[] args)
    {
      string path = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll";
      string pattern = "Content*";
      Assembly assm = Assembly.LoadFile(path);
      Type[] types = assm.GetTypes();

      IList<Type> res = (from t in types where Match(t.Name, pattern) orderby t.Name ascending select t).ToList();
}

So, an sich funktioniert das auch ganz gut. ABER: In der Ausgabe stecken auch Typen mit dem Namen "IContentHost", "BitmapEffectContent", etc. Das soll aber nicht rausgefiltert werden, weil ich das "*" hinter Content und nicht davor gesetzt habe.

916 Beiträge seit 2008
vor 13 Jahren

Ja das klingt relativ logisch, was du brauchst ist ein "eindeutiger" Regex. Daher wenn du nur sowas matchen willst was mit Content ANFÄNGT dann [^Content*].

Again what learned...

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo lord_fritte,

dein Regex-Suchmuster Content* hat sicherlich nicht den gewünschten Effekt: So sucht es derzeit nach dem festen String Conten, an den (optional) eine beliebige Anzahl des Buchstaben t angehängt wird. Gültige Funde wären demnach auch Conten, Contentt und Contentttttttttt.
Ergänze vor dem Asterisk einen Punkt und dein Pattern funktioniert wie gedacht:

string pattern = "Content.*";

Wenn die Zeichenkette Content am Anfang stehen muss, setze ein Zirkumflex an den Beginn des Suchmusters:

string pattern = "^Content.*";

Schau dir mal herbivores On-the-fly Regex-Tester: Regex-Lab an – damit hättest du diesen kleinen Fehler leicht selbst gefunden.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

L
lord_fritte Themenstarter:in
553 Beiträge seit 2007
vor 13 Jahren

Ah vielen Dank.