【发布时间】:2022-08-15 11:42:04
【问题描述】:
my $line = \"The quick brown fox jumps over the lazy dog.\";
while ($line){
$line =~ s/[\"\",]//ig; #[] means to get rid of
#print $line
$line = lc($line); #lc is lowercase
while ($line=~m/\\b(\\w+\\s\\w+)\\b/ig){ #[^ ] means any character except spaces and newline #($line=~m/\\b(\\s\\w+\\s\\w+)\\b/ig)
my $word =$1;
print \"$word\\n\";
$wordcount{$word} += 1;
}
last;
}
close(INPUT);
close(OUTPUT);
期望的输出将是:快速,快速的棕色狐狸,棕色狐狸,狐狸跳跃......但是,对于上面的代码,我只得到快速,棕色狐狸,跳跃......
-
[^ ]表示“任何不是空格的字符”。它不包括换行符。为什么会呢?[^ \\n]将匹配“任何不是空格或换行符的字符”。 -
@GüntherBayler
\\S将包括标点符号,就是一个例子。 OP 想要计算单词,并不是所有的非空白字符都是单词字符。例如,fox?与fox不同。 -
@7akeoverforce 顺便说一句:那里不需要
\\b(单词边界锚点)——前面的\\w+(单词字符串)在第一个“非单词”字符处停止精确匹配,即如何定义 \"word boundary\"(\\w和\\W(非单词字符)之间的位置)