2016-11-29 2 views
0

Я решаю, какой из них использовать, либо использовать Regex.Replace, либо использовать Regex.Matches, если вам нужно выполнить некоторую логику в каждом матче, чтобы сгенерировать замененное значение.C# regex.replace vs regex.matches

Сценарий: Чтение файла (который может отличаться по размеру), а затем с использованием регулярного выражения для замены совпадений. замененное значение для каждого совпадения отличается и генерируется некоторой логикой.

Подход 1: Прочитайте полный файл, затем найдите все совпадения, а затем выполните цикл foreach или for и замените их по очереди.

Подход 2: прочитать полный файл, а затем использует метод Regex.Replace с MatchEvaluator, где функция MatchEvaluator выполняет логику и возвращает значение заменяется.

Существует статья, которую я хотел бы связать здесь, что почему-то дает мне ощущение, что не следует использовать Regex.Replace. Ссылка: https://blogs.msdn.microsoft.com/debuggingtoolbox/2008/04/02/comparing-regex-replace-string-replace-and-stringbuilder-replace-which-has-better-performance/

+0

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

+0

Если ваш файл меньше 1 ГБ, не беспокойтесь о производительности (любые выигрыши будут минимальными между Regex.Replace и Regex.Matches). Просто подходите к подходу, который, по вашему мнению, проще реализовать. – wdosanjos

ответ

0

Подход 1:

  • Это будет читать весь файл. (Почитайте для потребления памяти.)
  • foreach петли на больших объемах данных (больше трудоёмкий.)

подход 2:

  • Это также будет читать весь файл ,
  • MatchEvaluator (уверен, что занимает больше времени)

подход 3:

  • прочитать файл построчно. MDSN Link
  • ли string.replace(), как проверяется link you provided.
  • Append каждый результат привести файл в то же самое время.
Смежные вопросы