Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Perl и поиск совпадений (http://forum.oszone.net/showthread.php?t=179079)

armandi 24-06-2010 14:56 1440867

Perl и поиск совпадений
 
Ребяты помогите решить проблему...

Есть текстовый файл содержащий аннотации статей.
Необходимо извлечь фамилии авторов которые там находятся в формате Иванов И. И..

Написал скрипт с помощью рег. выражений, но он находит лишь первое совпадение

# Открываем файл
open(TEXT,"ww.txt") || die "Не могу открыть файл";
# Читаем его содержимое
@lines=<TEXT>;
# Закрываем файл
close TEXT;
# Помещаем содержимое файла в переменную $all, предварительно слив всё в одну строку
$all = join("",@lines);

if ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)/) {print $1;}

Он печатает лишь первую фамилию в файле... остальных похоже даже не ищет...

Как сделать так чтоб он в этой строке находил все совпадения и печатал их в столбик (или записывал в файл)?

armandi 24-06-2010 15:07 1440877

да и функция m/texttexttext/g тоже не помогает

mrcnn 24-06-2010 15:20 1440889

Код:

if ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)/) {print $1;}
Этот код выдирает только первое вхождение.
Чтобы выдрать все фамилии, нужно организовать цикл и на каждой итерации запомнить всю строку после каждой фамилии.

Код:

while ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)(.*)/) {print $1;$all=$2;}

kim-aa 24-06-2010 17:11 1440960

Построчная обработка файла в Perl
http://forum.oszone.net/thread-170360.html


Цитата:

Цитата armandi
# Помещаем содержимое файла в переменную $all, предварительно слив всё в одну строку
$all = join("",@lines); »

Я бы решал задачу по другому.
Сначала построчно искал все фамилии при помощи шаблона Regex и добавлял бы их в массив.
Потом бы при остром желании, удалял бы из массива дубли.

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


Время: 19:34.

Время: 19:34.
© OSzone.net 2001-