2013-03-28 33 views
5

tôi có một danh sách chứa tên tập tin (không có đường dẫn đầy đủ của họ)Regex để có được phần mở rộng tập tin

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]; 
} 

Tôi không muốn sử dụng String.Split, làm thế nào tôi sẽ nhận được phần mở rộng của tập tin với regex ?

+3

Tại sao không sử dụng Path.GetExtension? Regex là quá mức cần thiết ở đây nếu bạn chỉ muốn phần mở rộng. – keyboardP

+0

để lấy đúng ext var ext = val [1]; tốt hơn có thể là: var ext = val [val.Length-1] ;, mã hiện tại của bạn có hiệu suất tốt hơn như một regex hoặc bất kỳ phương thức nào khác nếu bạn bắt đầu bằng một chuỗi. – Peter

Trả lời

4

Bạn có thể sử dụng Path.GetExtension().

Ví dụ (cũng loại bỏ các dấu chấm):

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

// extension now contains "ext" 
+0

tôi không có đường dẫn tệp đầy đủ. –

+4

Bạn không cần nó. – vanneto

13

Bạn không cần phải sử dụng regex cho điều đó. Bạn có thể sử dụng phương pháp Path.GetExtension.

Trả về phần mở rộng của chuỗi đường dẫn được chỉ định.

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

Đây là DEMO.

0

"\. [^ \.] +" Khớp với bất kỳ thứ gì bắt đầu bằng '.' ký tự theo sau bởi 1 hoặc nhiều hơn không có '.' nhân vật.

Bằng cách này, những người khác là đúng, regex là quá mức cần thiết ở đây.

2

Các regex là

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

thời gian bỏ trốn, 1 hoặc nhiều ký tự chữ-số, kết thúc chuỗi


Bạn cũng có thể sử dụng LastIndexOf ("")

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

Nhưng sử dụng chức năng tích hợp trong i s luôn thuận tiện hơn.

3

Để có được gia hạn sử dụng regex:

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

Hoặc nếu bạn muốn chắc chắn có một dấu chấm:

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

Đối với lợi ích của nhân viên của Google -

tôi đã được xử lý với tên tập tin kỳ lạ ví dụ FirstPart.SecondPart.xml, với phần mở rộng chưa được biết.

Trong trường hợp này, Path.GetFileExtension() bị nhầm lẫn bởi các dấu chấm phụ.

Các regex Tôi đã từng là

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

ví dụ phù hợp với ví dụ cuối cùng của 3 hoặc 4 ký tự có dấu chấm trong chỉ phía trước. Bạn có thể kiểm tra tại đây theo số Regexr. Không phải là một người chiến thắng giải thưởng, nhưng đã làm các trick.

Lỗ hổng rõ ràng là nếu phần thứ hai là 3-4 ký tự và tệp không có phần mở rộng, nó sẽ chọn nó, tuy nhiên tôi biết đó không phải là tình huống tôi gặp phải.

Các vấn đề liên quan