![]() |
Perl и поиск совпадений
Ребяты помогите решить проблему...
Есть текстовый файл содержащий аннотации статей. Необходимо извлечь фамилии авторов которые там находятся в формате Иванов И. И.. Написал скрипт с помощью рег. выражений, но он находит лишь первое совпадение # Открываем файл open(TEXT,"ww.txt") || die "Не могу открыть файл"; # Читаем его содержимое @lines=<TEXT>; # Закрываем файл close TEXT; # Помещаем содержимое файла в переменную $all, предварительно слив всё в одну строку $all = join("",@lines); if ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)/) {print $1;} Он печатает лишь первую фамилию в файле... остальных похоже даже не ищет... Как сделать так чтоб он в этой строке находил все совпадения и печатал их в столбик (или записывал в файл)? |
да и функция m/texttexttext/g тоже не помогает
|
Код:
if ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)/) {print $1;} Чтобы выдрать все фамилии, нужно организовать цикл и на каждой итерации запомнить всю строку после каждой фамилии. Код:
while ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)(.*)/) {print $1;$all=$2;} |
Построчная обработка файла в Perl
http://forum.oszone.net/thread-170360.html Цитата:
Сначала построчно искал все фамилии при помощи шаблона Regex и добавлял бы их в массив. Потом бы при остром желании, удалял бы из массива дубли. В случае предлагаемом вами нагрузка очень большая, т.к. по сути файл будет многократно перечитываться на предмет совпадений. |
Время: 19:34. |
Время: 19:34.
© OSzone.net 2001-