我正在使用Perl來執行一些文件清理,並遇到一些性能問題。我的代碼的主要部分之一涉及標準化名稱字段。我有幾個部分看起來像這樣:Perl正則表達式 - 查找/替換的冷凝組
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 /;
}
我通過引用傳遞嘗試並獲得至少有一點速度,但我擔心,運行這麼多(數以百計的)特定字符串的對數代替數千(最終可能有數十萬)記錄會損害性能。
有沒有更好的方式來實現這種邏輯比我目前做的是?
感謝
編輯:快速注意,不是所有的替換功能只是移除句點和空格。有串缺失,同音團體等
如果你想匹配句點,你是不是錯過了一些反斜槓?請記住'.'是一個符合句點的元字符,但也包含任何其他內容。 – cjm 2010-06-07 22:13:42
哎呀,好點。感謝您指出了這一點。 – brydgesk 2010-06-07 22:48:53