Два небольших регулярных выражения для извлечения диска, пути и имени файла из windows-адреса файла и пути и имени файла из unix-адреса.
Собственно вот они:
([A-Za-z]\:\\)([^/]+[\\])(\w+\.\w+$) — Windows
(^/.*./)(\w+\.\w+$) — unix
В C# можно их использовать следующим образом:
string path = @"C:\Windows\notepad.exe";
MatchCollection matches = Regex.Matches(path, @"([A-Za-z]\:\\)([^/]+[\\])(\w+\.\w+$)", RegexOptions.IgnoreCase);
Console.WriteLine("Диск: {0}", matches[0].Groups[1].Value);
Console.WriteLine("Путь: {0}", matches[0].Groups[2].Value);
Console.WriteLine("Имя файла: {0}", matches[0].Groups[3].Value);
path = @"/etc/X11/xorg.conf";
matches = Regex.Matches(path, @"(^/.*./)(\w+\.\w+$)", RegexOptions.IgnoreCase);
Console.WriteLine("Путь: {0}", matches[0].Groups[1].Value);
Console.WriteLine("Имя файла: {0}", matches[0].Groups[2].Value);
Скачать пример
О, регулярные выражения.
Не подскажешь толковую литературу по ним под C#?
Конечно
(по этой статье я и учился регулярно выражаться)
Фигня! Не будет работать если в имени файла пробел!
Так все работает:
MatchCollection matches = Regex.Matches (path, @"([A-Za-z]\:\\)([^/]+[\\])([^\.]+\.[^\.]+$)", RegexOptions.IgnoreCase); // win
matches = Regex.Matches (path, @"(^/.*./)([^\.]+\.[^\.]+$)", RegexOptions.IgnoreCase); //lin
я еще могу понять, еслиб Вы поместили пару шаблонов с регулярными выражениями в одну статью, но по каждой регулярке создавать отдельную — абсурд, особенно если учесть что никаких заметок и добавочной информации нет, один копипаст, это можно и в мсдн найти