Как Regex искать / заменять только первое вхождение в строку в .NET?

Кажется, что метод .NET Regex.Replace автоматически заменяет все совпадающие вхождения. Я мог бы предоставить делегат MatchEvaluator, который возвращает согласованную строку после первой замены, не меняя никаких изменений, но для меня это очень неэффективно.

Какой самый эффективный способ остановиться после первой замены?

Из MSDN :

Replace(String, String, Int32) 

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

Разве это не то, чего вы хотите?

Чтобы ответить на исходный вопрос … Следующее регулярное выражение соответствует только первому экземпляру слова foo:

(?

В этом регулярном выражении используется отрицательный lookbehind (?

Вероятно, вы использовали статический метод. Для этого нет (String, String, Int32) перегрузки. Сначала создайте объект регулярного выражения и используйте myRegex.Replace.

В этом случае вы не можете использовать:

 string str ="abc546_$defg"; str = Regex.Replace(str,"[^A-Za-z0-9]", ""); 

Вместо этого вам нужно объявить новый экземпляр Regex и использовать его следующим образом:

 string str ="abc546_$defg"; Regex regx = new Regex("[^A-Za-z0-9]"); str = regx.Replace(str,"",1) 

Обратите внимание на 1 , Он представляет количество случаев, в которые должна произойти замена.

Вместо создания new Regex вы также можете сделать

Regex.Replace(originalString, "^"+pattern, stringToReplaceWith);

чтобы заменить первое вхождение.

  • Отрицание обратной ссылки в регулярных выражениях
  • Регулярное выражение, соответствующее полностью квалифицированным именам classов
  • Возможно ли, чтобы компьютер «научил» регулярное выражение примерами, предоставленными пользователем?
  • Жадный против неохотного против властных квантификаторов
  • Разделить текст по столбцам в PowerShell
  • Какова техническая причина, по которой «lookbehind assertion ДОЛЖЕН быть фиксированной длиной» в регулярном выражении?
  • Переименовать ': 2f' to '-' в имена папок в Linux
  • Список всех файлов, соответствующих шаблону полного пути в R
  • Regex: Я хочу, чтобы это И было И что ... в любом порядке
  • Катастрофическое обратное отслеживание не должно происходить в этом регулярном выражении
  • Автоматически добавлять комментарии к файлам PDF с регулярными выражениями
  • Давайте будем гением компьютера.