Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Perl и поиск совпадений

Ответить
Настройки темы
Разное - Perl и поиск совпадений

Пользователь


Сообщения: 63
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: armandi
Дата: 24-06-2010
Описание: дополнение
Ребяты помогите решить проблему...

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

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

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

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

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

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

Отправлено: 14:56, 24-06-2010

 

Пользователь


Сообщения: 63
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:07, 24-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
while ($all=~ /([A-Яа-я]{2,20}\s[А-Я]\.\s[А-Я]\.)(.*)/) {print $1;$all=$2;}

-------
Ehhh.. what's up, doc?..


Отправлено: 15:20, 24-06-2010 | #3


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


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


Цитата armandi:
# Помещаем содержимое файла в переменную $all, предварительно слив всё в одну строку
$all = join("",@lines); »
Я бы решал задачу по другому.
Сначала построчно искал все фамилии при помощи шаблона Regex и добавлял бы их в массив.
Потом бы при остром желании, удалял бы из массива дубли.

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

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 17:11, 24-06-2010 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Perl и поиск совпадений

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Теория - Regexp-ы, определение количества совпадений hasherfrog Программирование и базы данных 2 02-04-2009 12:11
perl simon171078 Вебмастеру 2 08-09-2006 19:44
FreeBSD 5.3 Perl не видит локали, а KDE при сборке не видит perl :o mar Общий по FreeBSD 8 06-05-2005 13:13
Perl Guest Программирование и базы данных 2 08-03-2004 23:00
Perl::Tk CBMen Вебмастеру 1 24-02-2003 16:56




 
Переход