Регулярное выражение для извлечения всего перед первым слешем - PullRequest
3 голосов
/ 11 марта 2010

Мне нужно регулярное выражение, чтобы в основном получить первую часть строки, перед первой косой чертой ().

Например, в следующем:

C: \ MyFolder \ MyFile.zip

Мне нужна часть " C: "

Другой пример:

somebucketname \ MyFolder \ MyFile.zip

Мне нужно было бы " somebucketname "

Мне также нужно регулярное выражение для извлечения его «правой руки», поэтому все после первой косой черты (исключая косую черту)

Например

somebucketname \ MyFolder \ MyFile.zip

вернется

MyFolder \ MyFile.zip .

Ответы [ 6 ]

4 голосов
/ 11 марта 2010

Вам не нужно регулярное выражение (для такой простой задачи, как эта) может потребоваться слишком много времени, попробуйте вместо этого:

yourString = yourString.Substring(0, yourString.IndexOf('\\'));

А чтобы найти все после первой косой черты, вы можете сделать это:

yourString = yourString.Substring(yourString.IndexOf('\\') + 1);
3 голосов
/ 12 марта 2010

Эту проблему можно довольно просто решить с помощью механизма регулярных выражений .NET. Что делает регулярные выражения .NET действительно приятным, так это возможность использовать именованные захваты групп.

Использование захвата именованной группы позволяет вам определить имя для каждой части регулярного выражения, которое вас интересует в «захвате», к которому вы можете обратиться позже, чтобы получить его значение. Синтаксис для захвата группы: «(? XxSome Regex Expressionxx). Не забудьте также включить оператор импорта System.Text.RegularExpressions при использовании регулярного выражения в вашем проекте.

Наслаждайтесь!

// Регулярное выражение

  string _regex = @"(?<first_part>[a-zA-Z:0-9]+)\\{1}(?<second_part>(.)+)";

  //Example 1
  {
    Match match = Regex.Match(@"C:\MyFolder\MyFile.zip", _regex, RegexOptions.IgnoreCase);
    string firstPart = match.Groups["first_part"].Captures[0].Value;
    string secondPart = match.Groups["second_part"].Captures[0].Value;
  }

  //Example 2
  {
    Match match = Regex.Match(@"somebucketname\MyFolder\MyFile.zip", _regex, RegexOptions.IgnoreCase);
    string firstPart = match.Groups["first_part"].Captures[0].Value;
    string secondPart = match.Groups["second_part"].Captures[0].Value;
   }
2 голосов
/ 11 марта 2010

Вам известно, что классы обработки файлов .NET делают это более элегантно, верно?

Например, в вашем последнем примере вы можете сделать:

FileInfo fi = new FileInfo(@"somebucketname\MyFolder\MyFile.zip");
string nameOnly = fi.Name;

Первый пример, который вы можете сделать:

FileInfo fi = new FileInfo(@"C:\MyFolder\MyFile.zip");
string driveOnly = fi.Root.Name.Replace(@"\", "");
1 голос
/ 12 марта 2010

Это соответствует всем не \ chars

[^\\]*
0 голосов
/ 12 марта 2010

Разделить на косую черту, затем получить первый элемент

words = s.Split('\\');
words[0]
0 голосов
/ 11 марта 2010

Вот решение с регулярным выражением, использующее «жадный» оператор '?' ...

        var pattern = "^.*?\\\\";
        var m = Regex.Match("c:\\test\\gimmick.txt", pattern);
        MessageBox.Show(m.Captures[0].Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...