Извлечь строку с регулярным выражением в C # - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть эта строка в C #: "/ 19 / Ora01", и я хочу извлечь "Ora01"

Я пытался безуспешно:

var pattern = @"^(Ora[0-9]{2})$";

var match = Regex.Match(args.Path, pattern);

var hour = match.Groups[0].Value;

Что я делаю не так?

Как насчет извлечения двух других строк, одна с 19, другая с Ora01?

Ответы [ 6 ]

2 голосов
/ 03 апреля 2019

^ означает «начало строки», а «$» означает «конец строки». Вы запросили что-то, содержащее только Ora, за которым следуют две цифры. По крайней мере, удалите ^. Группировка также не требуется. Ora[0-9]{2} должно работать:

var pattern = @"Ora[0-9]{2}";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups[0].Value;
hour.Dump();

Отпечатки Ora01.

Если вам нужна часовая часть после Ora, вам нужно сгруппировать цифры:

var pattern = @"Ora(?<hour>[0-9]{2})";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups["hour"].Value;
Console.WriteLine(hour);

Это печатает:

01

Вы не объясняете, какую проверку вы хотите выполнить, например, имеет ли значение косые черты или нет, должен ли 19 присутствовать и, например, рассматриваться как год.

Если вы хотите убедиться, что строка соответствует этому формату и , первая часть состоит из двух цифр, вы можете использовать, например, @"/(?<year>\d{2})/Ora(?<hour>\d{2})":

var pattern = @"/(?<year>\d{2})/Ora(?<hour>\d{2})";

var match = Regex.Match("/19/Ora01", pattern);

var hour = match.Groups["hour"].Value;
var year = match.Groups["year"].Value;
Console.WriteLine($"{year} {hour}");

Это печатает:

19 01

Только если формат правильный.

2 голосов
/ 03 апреля 2019

Это то, что вы хотите с Regex:

public static void Main(string[] args)
  {
    string pattern = "\\/(.*?)\\/(.+)";
    string text = "/19/Ora01";
    Match match = Regex.Match(text, pattern);
    string first = match.Groups[1].Value;
    string second = match.Groups[2].Value;

    Console.WriteLine(first);
    Console.WriteLine(second);

    Console.ReadLine();
  }

Рассмотрим также ответ, предоставленный Рахул .

2 голосов
/ 03 апреля 2019

Что если вы Split() на /, если ваша строка будет иметь шаблон /19/Ora01

var data = "/19/Ora01".Split("/", StringSplitOptions.RemoveEmptyEntries);
1 голос
/ 03 апреля 2019

Regex - лучший способ сделать это:

string pattern = "\\/(.*?)\\/(.+)";
string text = "/19/Ora01";
Match match = Regex.Match(text, pattern);
string first = match.Groups[1].Value;
string second = match.Groups[2].Value;

Console.WriteLine(first);
Console.WriteLine(second);

Также @Panagiotis Kanavos, вероятно, является лучшим и наиболее полным ответом.

1 голос
/ 03 апреля 2019

В регулярном выражении ^ означает совпадение с начала строки.

Так же, как $ означает совпадение с концом строки.

Просто удалите ^ из вашего шаблона, и ваш код должен работать.

0 голосов
/ 03 апреля 2019

Вы можете использовать string.Split для этого тоже. Может быть быстрее, чем регулярное выражение, но зависит от ваших потребностей.

со строкой. Это может выглядеть как

var result = start.Substring(start.LastIndexOf("/") + 1);

Если вы хотите использовать регулярные выражения, вы должны удалить «^». Для простоты тестирования и получения дополнительной информации посмотрите на regexr.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...