我知道我可以编写自己的while循环以及regex来计算一行中的单词。但是,我正在处理1000行,我不想每次都运行这个循环。所以,我想知道有没有办法计算perl中行中的单词。
答案 0 :(得分:4)
要计算单词,首先需要确定单词是什么。一种方法是匹配连续单词字符组,但将“它”作为两个单词。 另一种方法是匹配连续非空格的组,但将“短语 - 短语”视为三个单词。一旦你有一个匹配单词的正则表达式,你可以计算这样的单词(在这个例子中使用连续的单词字符):
scalar( () = $line =~ /\w+/g )
答案 1 :(得分:2)
如何在一个或多个非单词字符上拆分行并计算结果数组的大小?
$ echo "one, two, three" | perl -nE "say scalar split /\W+/"
3
作为一个潜艇:
# say count_words 'foo bar' => 2
sub count_words { scalar split /\W+/, shift }
要摆脱ysth发现的主要空间问题,您可以过滤掉空片段:
$ echo " one, two, three" | perl -nE 'say scalar grep {length $_} split /\W+/'
3
...或剃掉输入字符串:
$ echo " one, two, three" | perl -nE 's/^\W+//; say scalar split /\W+/'
3