Проанализируйте имя файла от полного пути с помощью регулярных выражений в C#

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

20
задан Peter Mortensen 8 March 2010 в 13:56
поделиться

6 ответов

//  using System.Text.RegularExpressions;

/// <summary>
///  Regular expression built for C# on: Tue, Oct 21, 2008, 02:34:30 PM
///  Using Expresso Version: 3.0.2766, http://www.ultrapico.com
///  
///  A description of the regular expression:
///  
///  Any character that is NOT in this class: [\\], any number of repetitions
///  End of line or string
///  
///
/// </summary>
public static Regex regex = new Regex(
      @"[^\\]*$",
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );

ОБНОВЛЕНИЕ: удаленная начинающаяся наклонная черта

19
ответ дан 29 November 2019 в 22:43
поделиться

Почему необходимо использовать регулярные выражения?.NET имеет встроенное Path.GetFileName() метод специально для этого, которое работает через платформы и файловые системы.

36
ответ дан 29 November 2019 в 22:43
поделиться

Вот один подход:

string filename = Regex.Match(filename, @".*\\([^\\]+$)").Groups[1].Value;

В основном, это соответствует всему между самой последней обратной косой чертой и концом строки. Конечно, как Вы упомянули, с помощью Пути. GetFileName () намного легче и обработает много пограничных случаев, которые являются болью для обработки с regex.

7
ответ дан 29 November 2019 в 22:43
поделиться

Короче:

string filename = Regex.Match(fullpath, @"[^\\]*$").Value;

Или:

string filename = Regex.Match(fullpath, "[^\\"+System.IO.Path.PathSeparator+"]*$").Value;

Без Regex:

string[] pathparts = fullpath.Split(new []{System.IO.Path.PathSeparator});
string file = pathparts[pathparts.Length-1];

официальная поддержка библиотеки Вы упомянули:

string file = System.IO.Path.GetFileName(fullpath);
5
ответ дан 29 November 2019 в 22:43
поделиться

Необходимо скорее использовать Систему. Класс пути. Это будет означать, что необходимо будет волноваться о меньше, если Вы когда-нибудь решаете поддерживать Моно / Linux (пример dlamblin принимает разделитель пути во внимание, но можно получить странную ОС, которая имеет странные пути). Система. Класс пути может также объединить два пути к одному. Так, например:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My App Stuff");

разрешил бы:

  • Windows: C:\Documents and Settings\[User]\My Documents\My App Stuff
  • Linux: / [Пользователь] / Мой Материал Приложения
0
ответ дан 29 November 2019 в 22:43
поделиться
\w+:\\(\w+\\)*(?<file>\w*\.\w*)

Этому, очевидно, было бы нужно расширение для покрытия всех символов пути, но именованная группа "файл" содержит имя файла для данного пути в качестве примера.

1
ответ дан 29 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: