Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм нахождения подстроки 
:(
    Опции темы
s_a_s_h_a
Дата 24.8.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Программисты, помогите пожалуйста советом. Надо придумать алгоритм, который усекал бы строки следующим образом.

Например, у нас есть десяток строчек

ааааа ббббб вввввв ::: гггг
ааааа ддддд ааааа
ааааа ЖЖЖ вылылжд ::: ---- оалвоалд
.............................................................
ааааа::::оадвоалды

мне надо получить эти строчки без ааааа.
Т.е. обрезать одинаковую последовательность символов (только сначала, из середины и конца не надо).

Самое плохое что этих строк много.

Это сообщение отредактировал(а) s_a_s_h_a - 24.8.2004, 17:27
PM MAIL   Вверх
GoodBoy
Дата 24.8.2004, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Код
foreach my $line (@lines) {
   $line =~ s/(^aaaaa|aaaaa$)//;
}

Может так???


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
HalkaR
Дата 24.8.2004, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Нет, похоже имелось в виду, что надо удалять любую последовательность одинаковых символов из начала.

Код
Глюки

PM MAIL   Вверх
GoodBoy
Дата 24.8.2004, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



HalkaR :-)))))))))))
Так ты удалишь ВСЮ строку!!! :-)))))) Читаем регэксп: от начала строки (^) любой символ (.) повторяющийся 1 и более раз (+?)... :-))))) Это выражение соответствует всей строке!


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Secandr
Дата 24.8.2004, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



HalkaR
тут нужны обратные сслылки:
/(.)(\\1)+/\\1/gi
если я синтаксис не забыл


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
korob2001
Дата 24.8.2004, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Может такой вариант подойдёт?
Код

#!/usr/bin/perl
use locale;
$str = 'ааааа ббббб вввввв ::: гггг';
$str =~ s/^([a-zA-ZА-Яа-я])\1+(?:\s+)?//;
print $str;

или так:
Код

#!/usr/bin/perl
use locale;
$str = 'ааааа ббббб вввввв ::: гггг';
$str =~ s/^([a-zA-ZА-Яа-я])(?:\1+)?(?:\s+)?//;
print $str;


Это сообщение отредактировал(а) korob2001 - 24.8.2004, 22:32


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Secandr
Дата 25.8.2004, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



korob2001
А мочему [a-zA-ZА-Яа-я]? А если я напишу так
Цитата
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
Лучше уж точка.
И почему бы не использовать модификатор g - что бы за раз делать все возможные замены?

Я бы так сделал:
Код
#!/usr/bin/perl
use locale;
$str = 'ааааа ббббб вввввв ::: гггг';
$str =~ s/(.)\1+/\1/g;
print $str;

{заменить все повторяющиеся символы одним}
Добавлено @ 08:19
Перечитал пост, понял, нужно только из начала и один раз smile.gif
Добавлено @ 08:21
Если ааааа - определёной длинны, то можно просто:
Код
print substr $line,6;



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
s_a_s_h_a
Дата 25.8.2004, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Всем спасибо за ответы, но я наверное плохо объяснил. Попытаюсь еще раз.
1) у нас есть несколько строк.
2) каждая строка - произвольный набор символов.
3) надо определить встречается ли в каждой из этих строк одна и та же последовательность символов и если да, то удалить ее из каждой строки.
PM MAIL   Вверх
Secandr
Дата 25.8.2004, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



Объясняешь ты не ахти...

Тебе нужно следующее:
1. прочитать файл построчно
2. для каждой строки найти символы до пробела $line=~m/^([^ ]+)[ ]/
3. Если это первая строка запомнить $1 в $first, иначе сравнить $1 и $first
4. Если $1 и $first не совпали, значит не все строки начинаются с одинаковых символов, выходим из цикла и ставим флаг $no=1;
5. После окончания цикла проверяем $no==1, если нет, то читаем весь файл и выризаем первые символы.


Добавлено @ 09:32
я правильно понял?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
HalkaR
Дата 25.8.2004, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



GoodBoy , и правда глючу sad.gif
Имелось в виду

Код
foreach my $line (@lines) {
  $line =~ s/^(.+?) (.+?)$/$2/;
}

PM MAIL   Вверх
s_a_s_h_a
Дата 25.8.2004, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Secandr, почти. Только вот не до пробела. Пример:

1)
Название сайта :: раздел :: подраздел 1
..................................................................
Название сайта :: раздел :: подраздел N

результат должен быть:

подраздел 1
....................
подраздел N

2)
а может быть так:

Название сайта -- раздел 1
..................................................................
Название сайта -- раздел N

результат должен быть

раздел 1
....................
раздел N

и т.п.

Т.е. разделители неизвестны.

Это сообщение отредактировал(а) s_a_s_h_a - 25.8.2004, 09:49
PM MAIL   Вверх
Secandr
Дата 25.8.2004, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



если ничего не известно, то сделать ничего нельзя.

Тут нужны допущения:
+ пусть название "раздел 1" содержит пробелы, буквы и цифры

тогда
Код
$line=~s/^(.*)[^a-zA-Zа-яА-Я0-9 ]+([^a-zA-Zа-яА-Я0-9 ]+)$/\2/;
print "обрезали $1";

a-zA-Zа-яА-Я0-9 - сюда нужно добавить все не разделители.
Добавлено @ 09:54
или разделитель -это любой символ повторяющийся два раза, ....

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


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
s_a_s_h_a
Дата 25.8.2004, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Secandr, строки, которые мне нужно разобрать - это то, что получено из HTML-страниц, а именно: из тега <title>. У каждого создателя сайта свой вкус и стиль, так что я не могу представить все варианты разделителей, которые могут быть. В общем, это трабл?
Есть вариант - сравнить первые символы, потом вторые и т.д., но боюсь представить себе сколько будет работать скрипт!


PM MAIL   Вверх
GoodBoy
Дата 25.8.2004, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



HalkaR, ну опять же...
(.+?) эта последовательность означает 1 и более повторов ЛЮБЫХ символов!!!!!!! Т. е. это соответствует как "аааааа", так и "дывшгардловпрппысоваы" и даже "96и 96ывпаан п9ы7нвапм ргывплрывп лфор"...


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Secandr
Дата 25.8.2004, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



s_a_s_h_a Тебе нужна система с "искуственым интелектом", тут простой выборкой не обойтись.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.