Если Вы работаете над ответвлением, которое не будет выпущено, фиксация всегда безопасна.
Однако, если Вы совместно используете его с другими разработчиками, фиксируя нерабочий код, вероятно, будет немного раздражающим (особенно, если это будет в важном месте). Обычно я только фиксирую код, который эффективно "работает" - не, что он был полностью протестирован, но что я установил, что он на самом деле компилирует и сразу не перестал работать.
при использовании интегрированного средства отслеживания ошибки может быть полезно сделать отдельные фиксации, если Вы исправили две ошибки, так, чтобы журнал фиксации мог идти вразрез с правильными ошибками. Но с другой стороны, иногда одно изменение кода исправляет две ошибки, таким образом просто необходимо выбрать, какой поместить его против (если система не позволяет одной фиксации быть связанной с несколькими ошибками)
Твоя проблема - жадность. То есть жадность регулярных выражений. Ваш. * В начале схватывает все это «Надеюсь, он подберет 1Bob». попробуйте вместо этого это регулярное выражение:
\d(?<name>[^\d]+)\d
Каждый элемент группы имеет коллекцию захвата, вы можете получить доступ к первому захвату для группы, используя:
extractor.Groups["name"].Captures[0]
Соответствует предыдущему элементу ноль или один раз. это эквивалентно {0,1}. ? это жадный квантификатор, нежадный эквивалент которого ??.
Взято из здесь . На сайте есть шпаргалка по регулярным выражениям, и глядя на ваше выражение, я не могу понять, что с ним не так.
Я предполагаю, что оно может соответствовать последнему вхождению вашего выражения.
Знаки скобки * вокруг вашего выражения вызывают у вас проблемы. Помните, что вам не нужно регулярное выражение, которое соответствует всей строке - вы хотите, чтобы оно соответствовало только определенному шаблону, когда он появляется. Работает следующий код:
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"]);