我有一个关键字列表和一个黑名单.
我想删除包含任何黑名单项的所有关键字.
目前我这样做:
我想删除包含任何黑名单项的所有关键字.
目前我这样做:
my @keywords = ( 'some good keyword','some other good keyword','some bad keyword'); my @blacklist = ( 'bad' ); A: for my $keyword ( @keywords ) { B: for my $bl ( @blacklist ) { next A if $keyword =~ /$bl/i; # omitting $keyword } # some keyword cleaning (for instance: erasing non a-zA-Z0-9 characters,etc) }
我想知道有没有最快的方法来做到这一点,因为目前我有大约25万个关键词和黑名单中的几个hundrets词.
解决方法
最直接的选择是将黑名单条目加入到单个正则表达式中,然后为那些与该正则表达式不匹配的关键字列表grep:
#!/usr/bin/env perl use strict; use warnings; use 5.010; my @keywords = ('some good keyword','some bad keyword'); my @blacklist = ('bad'); my $re = join '|',@blacklist; my @good = grep { $_ !~ /$re/ } @keywords; say join "\n",@good;
输出:
some good keyword some other good keyword