Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Regex: Dateiglobs * und ? in Regex simulieren
lord_fritte
myCSharp.de - Member



Dabei seit:
Beiträge: 558

Themenstarter:

Regex: Dateiglobs * und ? in Regex simulieren

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
lord_fritte
myCSharp.de - Member



Dabei seit:
Beiträge: 558

Themenstarter:

beantworten | zitieren | melden

Ah vielen Dank.
private Nachricht | Beiträge des Benutzers