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