C # регулярное выражение для извлечения строки между двумя символами, но первый символ имеет несколько вхождений - PullRequest
2 голосов
/ 03 июня 2019

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

Пример:

TEST-[1111]-20190603-25_TEST17083

Мой код:

string input = "TEST-[1111]-20190603-25_TEST17083";
var matches = Regex.Matches(input,@"(?<=-)(.+?)(?=_)");
var match = matches.OfType<Match>().FirstOrDefault();
var value = match.Groups[0].Value;

Текущий результат:

[1111]-20190603-25

Ожидаемый результат:

25

Ответы [ 2 ]

4 голосов
/ 03 июня 2019

Давайте попробуем немного другой шаблон:

(?<=-)([^-_]+?)(?=_)

мы используем [^-_] вместо .: все символы , за исключением - и _

2 голосов
/ 03 июня 2019

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

.*-([0-9]*)_

, а затем получить первую подходящую группу (группу с идентификатором 1).

Итак, ваш код будет выглядеть так:

var input = "[1111]-20190603-25";
var pattern = @".*-([0-9]*)_";

var match = Regex.Match(input, pattern);
var value = match.Groups[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...