1
我有一個包含要從文件的每一行中刪除的單詞的數組。我使用的代碼大致如下:Perl - 正則表達式不被替換
my $INFILE;
my $OUTFILE;
my $STOPLIST;
open($INFILE, '<', $ARGV[0]);
open($STOPLIST, '<', "stop.txt");
open($OUTFILE, '>', $ARGV[1]);
my @stoplist = <$STOPLIST>;
my $line;
my $stopword;
while (<$INFILE>) {
$line = $_;
$line =~ s/\[[0-9]*\] //g;
$line =~ s/i\/.*\/; //g;
foreach (@stoplist) {
$stopword = $_;
$line =~ s/${stopword}//g;
}
print $OUTFILE lc($line);
}
然而,在非索引字表的話,仍然會在輸出文件中的文本,這將表明$line =~ s/${stopword}//g;
線沒有做它的工作如我所料。
我該如何做這項工作(即確保出現在輸入文本中的停止列表中的所有單詞都被輸出中的0個字符替換)?
您必須始終* *'使用strict'和'使用warnings'。如果你不這樣做,那麼你也不用費神地宣佈你的變量。 – Borodin
's/i \ /.* \ /; // g'會將'i /'的第一個*出現的文本移到'/的最後一個*出現處; '在字符串中,所以如果不止一次出現'i /.../;',那麼它們之間的所有內容都將被刪除。如果有*從不多於一個這樣的字符串,那麼你不需要'/ g'修飾符。 – Borodin