J'utilise Perl pour effectuer un nettoyage de fichiers et je rencontre des problèmes de performance. L'une des parties principales de mon code implique la normalisation des champs de nom. J'ai plusieurs sections qui ressemblent à ceci:Perl Regex - Groupes condensants de recherche/remplacement
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 /;
}
Je passe par référence pour essayer d'obtenir au moins un peu de vitesse, mais je crains que courir tant de (littéralement des centaines) de chaîne spécifique remplace des dizaines de des milliers (probablement des centaines de milliers) de disques vont nuire à la performance.
Existe-t-il une meilleure façon de mettre en œuvre ce genre de logique que ce que je fais actuellement?
Merci
Modifier: note rapide, toutes les fonctions sont remplacer simplement la suppression des délais et des espaces. Il y a des suppressions de chaîne, des groupes soundex, etc.
Si vous essayez de faire correspondre des périodes, ne trouvez-vous pas des barres obliques inverses? Rappelez-vous que '.' est un métacaractère qui correspond à la période, mais aussi à n'importe quoi d'autre. – cjm
whoops, bon point. Merci d'avoir fait remarquer cela. – brydgesk