Получение первого соответствия с regex (C#)

Если Вы работаете над ответвлением, которое не будет выпущено, фиксация всегда безопасна.

Однако, если Вы совместно используете его с другими разработчиками, фиксируя нерабочий код, вероятно, будет немного раздражающим (особенно, если это будет в важном месте). Обычно я только фиксирую код, который эффективно "работает" - не, что он был полностью протестирован, но что я установил, что он на самом деле компилирует и сразу не перестал работать.

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

5
задан Alan Moore 3 December 2009 в 00:49
поделиться

4 ответа

Твоя проблема - жадность. То есть жадность регулярных выражений. Ваш. * В начале схватывает все это «Надеюсь, он подберет 1Bob». попробуйте вместо этого это регулярное выражение:

\d(?<name>[^\d]+)\d
7
ответ дан 18 December 2019 в 13:15
поделиться

Каждый элемент группы имеет коллекцию захвата, вы можете получить доступ к первому захвату для группы, используя:

extractor.Groups["name"].Captures[0]
2
ответ дан 18 December 2019 в 13:15
поделиться

Соответствует предыдущему элементу ноль или один раз. это эквивалентно {0,1}. ? это жадный квантификатор, нежадный эквивалент которого ??.

Взято из здесь . На сайте есть шпаргалка по регулярным выражениям, и глядя на ваше выражение, я не могу понять, что с ним не так.

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

3
ответ дан 18 December 2019 в 13:15
поделиться

Знаки скобки * вокруг вашего выражения вызывают у вас проблемы. Помните, что вам не нужно регулярное выражение, которое соответствует всей строке - вы хотите, чтобы оно соответствовало только определенному шаблону, когда он появляется. Работает следующий код:

Regex pattern = new Regex(@"\d(?<name>.*?)\d");
MatchCollection matches = pattern.Matches("This hopefully will pick up 1Bob9error1 as a name");
Console.WriteLine(matches[0].Groups["name"]);
2
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

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