2013-03-28 6 views
5

ich eine Liste haben, die Dateinamen enthält (ohne ihren vollständigen Pfad)Regex die Dateierweiterung erhalten

List<string> list=new List<string>(); 

list.Add("File1.doc"); 
list.Add("File2.pdf"); 
list.Add("File3.xls"); 

foreach(var item in list) { 
    var val=item.Split('.'); 
    var ext=val[1]; 
} 

Ich will nicht String.Split verwenden, wie werde ich die Erweiterung der Datei mit regex erhalten ?

+3

Warum nicht Path.GetExtension verwenden? Regex ist hier zuviel, wenn du nur die Erweiterung willst. – keyboardP

+0

, um die richtige ext zu bekommen var ext = val [1]; kann besser sein: var ext = val [val.Length-1] ;, Ihr aktueller Code hat eine bessere Leistung als Regex oder eine andere Methode, wenn Sie mit einer Zeichenfolge beginnen. – Peter

Antwort

4

Sie könnten Path.GetExtension() verwenden.

Beispiel (entfernt auch den Punkt):

string filename = "MyAwesomeFileName.ext"; 
string extension = Path.GetExtension(filename).Replace(".", ""); 

// extension now contains "ext" 
+0

Ich habe keinen vollständigen Dateipfad. –

+4

Sie brauchen es nicht. – vanneto

13

Sie brauchen nicht regex dafür zu verwenden. Sie können Path.GetExtension Methode verwenden.

Gibt die Erweiterung der angegebenen Pfadzeichenfolge zurück.

string name = "notepad.exe"; 
string ext = Path.GetExtension(name).Replace(".", ""); // exe 

Hier ist ein DEMO.

0

"\. [^ \.] +" Entspricht allem, was mit '.' Zeichen gefolgt von 1 oder mehr Nein. Figuren.

Übrigens sind die anderen richtig, Regex ist hier zu viel.

2

Die Regex ist

\.([A-Za-z0-9]+)$ 

Entkommen Zeitraum, 1 oder mehr alphanumerische Zeichen, das Ende der Zeichenfolge


Sie könnten auch LastIndexOf verwenden ("")

int delim = fileName.LastIndexOf("."); 
string ext = fileName.Substring(delim >= 0 ? delim : 0); 

Aber mit der eingebauten Funktion i s immer bequemer.

3

Um die Erweiterung mit regex zu erhalten:

foreach (var item in list) { 
    var ext = Regex.Match(item, "[^.]+$").Value; 
} 

Oder wenn Sie wollen sicherstellen, dass es ein Punkt ist:

@"(?<=\.)[^.]+$" 
0

Zum Nutzen der Googler -

ich es zu tun hatte mit bizarren Dateinamen zB FirstPart.SecondPart.xml, wobei die Erweiterung unbekannt ist.

In diesem Fall wurde Path.GetFileExtension() durch die zusätzlichen Punkte verwirrt. nur

Die regex I verwendet wurde, war

\.[A-z]{3,4}$ 

d.h. mit einem Punkt vor der letzte Instanz von 3 oder 4 Zeichen übereinstimmen. Sie können es hier unter Regexr testen. Kein Preisträger, aber hat den Trick gemacht.

Der offensichtliche Fehler ist, dass, wenn der zweite Teil 3-4 Zeichen und die Datei keine Erweiterung hatte, würde es aufgreifen, aber ich wusste, dass dies keine Situation war, die ich begegnen würde.

Verwandte Themen