在Perl中使用Hash搜索

时间:2011-03-16 19:42:11

标签: perl string hash

我正在使用包含5000个项目的哈希来匹配句子中的单词,因此当我匹配例如:if($hash{$word}){Do Something}时,有时会发生这个句点出现在单词中,即使它是匹配的期间的存在导致不匹配。在与哈希匹配时,可以做任何事情来忽略任何标点符号吗?

2 个答案:

答案 0 :(得分:4)

您必须重新定义您查找的单词以排除标点符号,记住您可能或可能不想删除所有标点符号(例如,您可能希望保留短划线和撇号 - 但不是单引号)。 / p>

原始技术 - 不识别任何标点符号是:

$key = $word;
$key ~= s/\W//g;  # Any non-word characters are removed
if (defined $hash{$key}) { DoSomething; }

您可以优化替代命令以满足您的需求。

但确保散列键匹配的唯一方法是确保散列键匹配 - 因此您需要与您提供的内容保持一致。

答案 1 :(得分:0)

尝试:

my $s = $word;
$s =~ s/\W//g;
my $k;
for (keys %hash){
    s/\W//g;
    if($_ eq $s){
        $k = $_;
        last;
    }
}
if(defined $k){
    # Do Something
}