Я использую Perl для очистки некоторых файлов и сталкиваюсь с некоторыми проблемами производительности. Одна из основных частей моего кода включает стандартизацию полей имени. У меня есть несколько разделов, которые выглядят следующим образом:Perl Regex - Конденсирующие группы для поиска/замены
sub substitute_titles
{
my ($inStr) = @_;
${$inStr} =~ s/ PHD./ PHD /;
${$inStr} =~ s/ P H D/PHD /;
${$inStr} =~ s/ PROF./ PROF /;
${$inStr} =~ s/ P R O F/PROF /;
${$inStr} =~ s/ DR./ DR /;
${$inStr} =~ s/ D.R./ DR /;
${$inStr} =~ s/ HON./ HON /;
${$inStr} =~ s/ H O N/HON /;
${$inStr} =~ s/ MR./ MR /;
${$inStr} =~ s/ MRS./ MRS /;
${$inStr} =~ s/ M R S/MRS /;
${$inStr} =~ s/ MS./ MS /;
${$inStr} =~ s/ MISS./ MISS /;
}
Я передаю по ссылке, чтобы попытаться получить по крайней мере, немного скорости, но я боюсь, что работает так много (буквально сотни) из определенной строки заменяет на десятки тысячи (вероятно, сотни тысяч в конечном итоге) записей будут наносить ущерб производительности.
Есть ли лучший способ реализовать такую логику, чем то, что я делаю сейчас?
Благодаря
Edit: Быстрый записные, не все функции, заменяющие только удаление периодов и пространства. Есть строка делеции, SOUNDEX группы и т.д.
Если вы пытаетесь сопоставить периоды, разве вам не хватает некоторых обратных косых черт? Помните, что '.' является метасимволом, который соответствует периоду, но также и о чем-либо еще. – cjm
кричит, хорошая точка. Спасибо что подметил это. – brydgesk