Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Удалить все слова, заканчивающиеся на...


Автор: yorc 26.12.2009, 23:41
всем привет!

собственно, сабж))
допустим, есть строка типа:

Код

what#ND to#ND watch#n#1 in#n#3 2010#ND social#a#2 tv#n#1


так вот, из неё нужно удалить все слова, которые заканчиваются на: #ND #NR #IT #NT #CL #MW

я с трудом продрался сквозь дебри какого-то мануала по regexp, чтобы не приходить с пустыми руками)) вот что у меня получилось:

Код

$text =~ s/(.*)(?:#ND|#NR|#IT|#NT|#CL|#MW)//ig;


но, увы... НИ-ЧЕ-ГО этот мой код не удаляет... уважаемые знатоки! для вас, наверное, эта задачка проще простого?.. подскажите, пожалуйста, в какую сторону смотреть?..

Автор: shamber 26.12.2009, 23:59
Цитата(yorc @  26.12.2009,  23:41 Найти цитируемый пост)
    
$text =~ s/(.*)(?:#ND|#NR|#IT|#NT|#CL|#MW)//ig;

а так
Код

$text =~ s/(\w+(?:#ND|#NR|#IT|#NT|#CL|#MW))\s//ig;

Автор: sir_nuf_nuf 27.12.2009, 00:06
Код

$str =~ s/\S+#(?:ND|NR|IT|NT|CL|MW)//ig;

Автор: shamber 27.12.2009, 00:08
тьфу я тормоз smile про # не сообразил smile

Автор: yorc 27.12.2009, 06:54
всем спасибо! попробовал вариант sir_nuf_nuf - работает, ура!..

Автор: yorc 27.12.2009, 11:54
ох, поторопился я! оказалось, что этот регексп пропускает такой вариант, когда слово СОСТОИТ только из, например, #ND

как переписать в таком случае? подскажите, пожалуйста!

и ещё, сразу же - в последующем мне понадобится удалить из всех слов все символы начиная с первого встретившегося знака #

как в этом случае лучше написать?

Автор: amg 27.12.2009, 13:28
Цитата(yorc @  27.12.2009,  11:54 Найти цитируемый пост)
оказалось, что этот регексп пропускает такой вариант, когда слово СОСТОИТ только из, например, #ND
Это исправить легко smile
$str =~ s/\S*#(?:N[DRT]|IT|CL|MW)\b//ig;

Цитата(yorc @  27.12.2009,  11:54 Найти цитируемый пост)
удалить из всех слов все символы начиная с первого встретившегося знака #
Это еще проще
$str =~ s/#\S*//g;

Но как обычно, встает вопрос, что считать словом. Для всех предложенных выше вариантов слово -- это последовательность непробельных символов.

Автор: yorc 30.12.2009, 00:45
amg - спасибо за помощь! всё работает прекрасно!..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)