как посчитать количество слов в строке в perl? - PullRequest
0 голосов
/ 08 мая 2011

Я знаю, что мог бы написать свой цикл while вместе с регулярным выражением для подсчета слов в строке.Но я обрабатываю как 1000 строк, и я не хочу запускать этот цикл каждый раз.Итак, мне было интересно, есть ли способ посчитать слова в строке в Perl.

Ответы [ 2 ]

4 голосов
/ 08 мая 2011

1000 раз не является значительным числом для современного компьютера. В общем, напишите код, который имеет для вас смысл, а затем , если есть проблема с производительностью, беспокойтесь об оптимизации.

Для подсчета слов сначала нужно решить, что такое слово. Один из подходов состоит в том, чтобы сопоставить группы последовательных символов слова, но это считается "это" как два слова. Другой способ состоит в том, чтобы сопоставлять группы последовательных непробельных символов, но это означает «фразу - фразу» как три слова. Если у вас есть регулярное выражение, соответствующее слову, вы можете посчитать такие слова (используя последовательные символы слова в этом примере):

scalar( () = $line =~ /\w+/g )
2 голосов
/ 08 мая 2011

Как насчет разделения строки на один или несколько несловарных символов и подсчета размера результирующего массива?

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...