В процесе выполнения одной работы возникла потребность обрабатывать немного записей с базы данных MySQL (около 120000) Содержащих в себе данные о абонентах (ФИО, Адрес и тд.) и вывести данные в файл.
Проблема возникла при обработке номера дома и номера квартиры. Эти данные приходят ко мне в форме "12а/3" номер дома и "5б" номер квартиры.
В результате я должен получить строку вида "12;а;3;" для номера дома и "5;б;" для номера квартиры соответственно.
Для парсинга входящих строк я использую регулярные выражения и получил такой код.
Для дома:
str = str.Trim();
Regex reg = new Regex(@"(?<first>\d+)(?<firstch>[а-яіїє]*)(?<abort>\W*)(?<second>\d*)", RegexOptions.Compiled);
return reg.Match(str).Result("${first};${firstch};${second};");
где str входящая строка вида "12а/3".
Для квартиры:
str = str.Trim();
Regex reg = new Regex(@"(?<first>\d*)(?<firstch>[а-яіїє]*)", RegexOptions.Compiled);
return reg.Match(str).Result("${first};${firstch};");
где str входящая строка вида "5б".
Без обработки номера дома и номера квартиры программа выполняется приблизительно за 40 секунд. С использованием за 16 минут.
Не могу понять в чем проблема кода.
Или .NET так криво работает с регулярными выражениями...