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.
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...
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