1

Тема: Помощь в составлении регулярных выражений

Регулярные выражения - очень мощный инструмент для обработки текстов. ТК в полной мере поддерживает Perl-совместимые регулярки. Советую всем ознакомиться хотя бы с базовыми знаниями, которые могут повысить эффективности вашей работы.

Задавайте свои вопросы, касающиеся регулярных выражений в этом топике.

Полный мануал на руском языке (в MSDN): http://msdn.microsoft.com/ru-ru/library/hs600312.aspx
New Книга "Регулярные выражения" Джеффри Фридла на рутрекере

Еще неплохая подборочка материала: http://perldoc.narod.ru/regexp2-ref.pdf
Ещё это пойдёт как краткий справочник. Рекомендую.
Введение в регулярные выражения. Одна страничка. Вполне пойдёт для старта понимания регулярок. (Написано для PHP, но какая разница ;) )

Тестирование регулярных выражений онлайн:
http://www.gskinner.com/RegExr/
http://regexhero.net/tester/

Сразу приведу пример одной полезной регулярки.
Если после импорта вы увидели, что ваш контент не имеет параграфов (вообще), но имеет примерно следующий вид:

Добро пожаловать на форум!

Регистрируемся, добавляем пожелания и предложения, общаемся.

Важно! Пользователям платной версии textKit, для получения доступа в закрытый раздел, необходимо после регистрации отправить уведомление.

В таком случае параграфы можно очень легко расставить средствами поиска и замены (Ctrl + R) с применением регулярных выражений.
Всего повторим три замены:

\n\n+ повторяющиеся переносы строк
на
</p>\n\n<p>

^ начало текста
на
<p>

$ конец текста
на
</p>

В результате получим:

<p>Добро пожаловать на форум!</p>

<p>Регистрируемся, добавляем пожелания и предложения, общаемся.</p>

<p>Важно! Пользователям платной версии textKit, для получения доступа в закрытый раздел, необходимо после регистрации отправить уведомление.</p>

Отредактировано SeoNizator (24.06.2011 22:04:59)

2

Re: Помощь в составлении регулярных выражений

Прошу простить за лень  :|
Но где можно почитать про ваши регулярные выражения?

И вот еще сразу прошу помощи в составление.
Есть текст в нем встречаются:
<p>{PAGEBREAK}</p>
как заменить их на:
{PAGEBREAK}

3

Re: Помощь в составлении регулярных выражений

Claud пишет:

Но где можно почитать про ваши регулярные выражения?

Их не Nоgrik придумал ;) Они не его, а стандартные, применяемые во многих программах (отличаясь лишь кол-вом поддерживаемых конструкций).
Вот хороший документ http://perldoc.narod.ru/regexp2-ref.pdf (выдержка из перл-мана)

И вот еще сразу прошу помощи в составление.
Есть текст в нем встречаются:
<p>{PAGEBREAK}</p>
как заменить их на:
{PAGEBREAK}

Для этого регулярок и не надо ;) Так и пиши.

Как правильно задавать вопросы вообще и у нас в частности

Я не разработчик ТК

4

Re: Помощь в составлении регулярных выражений

Claud пишет:

Но где можно почитать про ваши регулярные выражения?

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

Вот полный документ по регуляркам в MSDN, используемым в .NET Framework (а значит и в ТК), на русском языке. Возможно не все будет понятно, но хотя бы основы, думаю, разобрать можно.

5

Re: Помощь в составлении регулярных выражений

Туго справочка пошла :)
Думаю этот пример пригодится многим. Допустим на странице имеется такой код:

Бла-бла-бла описание фильма.....
http://rapidshare.com/files/210582698/StargateDirCut.part01.rar<br />
http://rapidshare.com/files/210582876/StargateDirCut.part02.rar<br />
http://rapidshare.com/files/210582982/StargateDirCut.part03.rar<br />
http://rapidshare.com/files/210583096/StargateDirCut.part04.rar<br />
http://rapidshare.com/files/210583288/StargateDirCut.part05.rar<br />
http://rapidshare.com/files/210583439/StargateDirCut.part06.rar<br />
http://rapidshare.com/files/210583607/StargateDirCut.part07.rar<br />
http://rapidshare.com/files/210583764/StargateDirCut.part08.rar<br />
http://rapidshare.com/files/210583912/StargateDirCut.part09.rar<br />
<!--QuoteEnd--><!--QuoteEEnd--><br />

Вот, нужно перед http://rapidshare.com поставить <noindex> и закрыть его на <!--QuoteEnd--> или <br />.

А так же хотелось бы пример того, как закрыть все тела статей в <noindex>.....</noindex>, а так же Заголовоки статей.
Заранее спасибо за ответ:)

Отредактировано 10danilko45 (11.10.2009 14:58:05)

6

Re: Помощь в составлении регулярных выражений

10danilko45 пишет:

Вот, нужно перед http://rapidshare.com поставить <noindex> и закрыть его на <!--QuoteEnd--> или <br />.

Очень просто.
Заменить (http://rapidshare.com/.*?<!--QuoteEEnd-->) на <noindex>$1</noindex>.

10danilko45 пишет:

А так же хотелось бы пример того, как закрыть все тела статей в <noindex>.....</noindex>, а так же Заголовоки статей.

Не совсем понял, что имелось в виду. Если нужно полностью закрыть текст статьи в ноиндекс, то можно так:
заменить .* на <noindex>$_</noindex>

Если какой-то заголовок <h*> то так:
заменить (<(h\d)[^>]*>.*</\2>) на <noindex>$1</noindex> - h\d и \2 можно заменить на необходимый заголовок (h1, h2, h3, ...)

Здесь были использованы подстановки ($1, $_), обратные ссылки (\2), классы знаков ([], ., \d) и квантификаторы (*, ?).

7

Re: Помощь в составлении регулярных выражений

Подскажите пожалуйста регулярки, чтобы из всего проекта (контента) удалялись такие строки например:

...
<p> Интерфейс </p>
...
<p>Усовершенствованная статистика для активной записи</p>
...

тоесть предложения в 1 слово и просто короткие предложения (~6-10 слов)

Удалять из контента все цифры или цифры страниц они также бывают в одну строку

...
<p> 5 </p>
<p> 284 </p>
...

бывают ситуации когда цифры в контенте вообще не нужны поэтому полезны будут обе регулярки. Спасибо ;)

Отредактировано 4ePTeHoK (11.10.2009 17:28:24)

8

Re: Помощь в составлении регулярных выражений

Удалить параграф:

- с одним словом (цифрами): <p>\s*\w+\s*</p>
- с одним до 3-х слов разделенных пустым пространством (\s) или знаками препинания (\p{P}) <p>(\w+\s*\p{P}?\s*){1,3}</p>
-до пяти слов <p>(\w+\s*\p{P}?\s*){1,5}</p>

Также можно удалять по числу символов:

<p>[^<]{1,99}</p> - все параграфы короче 100 символов.

9

Re: Помощь в составлении регулярных выражений

Подскажите, как удалить цифры идущие в конце слова? Например:
Простой пример123

Удалить надо "123". Цифры могут быть разными, и их может быть любое количество.

10

Re: Помощь в составлении регулярных выражений

Попробуй такой вариант:

(\p{L})\d+

заменить на $1

Отредактировано TextKit (17.11.2009 12:41:24)

11

Re: Помощь в составлении регулярных выражений

А как удалить текст из статьи? Вернее в посте с разными тегами, рисунками, и т.д. (хочу очистить от английского текста а разметку оставить нетронутой)? Спасибо за ответ.

12

Re: Помощь в составлении регулярных выражений

Чтобы удалить весь текст (независимо от языка), заключенный между тегов:

>.*?< заменить на ><

13

Re: Помощь в составлении регулярных выражений

Нашел парочку онлайн инструментов, которые могут пригодится в составлении/тестировании регулярных вырвжений.
на флеше: http://www.gskinner.com/RegExr/
на сильверлайте: http://regexhero.net/tester/

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

14

Re: Помощь в составлении регулярных выражений

есть:
#title#Смотреть видео голые знаменитости#title#

нужно чтоб тексткит забрал текст нходящийся между #title#

как это сделать?

15

Re: Помощь в составлении регулярных выражений

нужно чтоб тексткит забрал текст нходящийся между #title#

Что значит "забрал"?
Удалить #title#? Или удалить текст межу ним?

Как правильно задавать вопросы вообще и у нас в частности

Я не разработчик ТК

16

Re: Помощь в составлении регулярных выражений

конструкция типа #title#(.*?)#title#  выберет только то что находится между титлами  ;)

Мне нравиться работать с Textkit.
Мой блог технологии для SEO

17

Re: Помощь в составлении регулярных выражений

Помогите! очень нужна Ваша помощь!

у меня текст такой структуры (csv):

^текст^,^текст1^,^текст1^,^текст1^,^текст1^,^текст1^,^no_photo_sml.gif^,^текст1^,^текст1^

там где "текст1" может быть все что хочешь, цифры, буквы, пробелы.

"no_photo_sml.gif" - это текст указывающий на то что это строка мне не нада, и ее нужно удалить. То есть нужно со всего текста удалить подобные строки где содержится только "no_photo_sml.gif" если там что нибудь другое то чтоб осталась в тексте. За ранее благодарен!

пробовал вот так вот заменять:

^.*?^,^.*?^,^.*?^,^.*?^,^.*?^,^.*?^,^no_photo_sml. gif^,^.*?^,^.*?^

нече не происходило ((

Отредактировано Conkord (25.01.2010 04:55:24)

18

Re: Помощь в составлении регулярных выражений

вроде работает     \^.*?no_photo_sml.gif\^.*?\n

Мне нравиться работать с Textkit.
Мой блог технологии для SEO

19

Re: Помощь в составлении регулярных выражений

есть:
#title#Смотреть видео голые знаменитости#title#

мне нужно вытянуть текст который находится между #title#

#title#(.*?)#title#

пробовал, оставляет #title# в тексте...

20

Re: Помощь в составлении регулярных выражений

мне нужно вытянуть текст который находится между #title#

А просто удалить #title# - не судьба?

Conkord, Эксель поможет это сделать в 3 клика ;)
А регулярка... может быть эта поможет (не проверял):

\А.*?no_photo_sml\.gif.*?\Z

или эта

\А.*?no_photo_sml\.gif.*?\z

Может кому-то эти регулярные выражения в .NET будут более понятны.

Как правильно задавать вопросы вообще и у нас в частности

Я не разработчик ТК

21

Re: Помощь в составлении регулярных выражений

А просто удалить #title# - не судьба?

  :|

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

22

Re: Помощь в составлении регулярных выражений

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

И что мы должны догадаться?
Прочитай мою подпись, ответь на выше заданные вопросы, в общем поставь правильно задачу, тогда может и будет решение проблемы.

Как правильно задавать вопросы вообще и у нас в частности

Я не разработчик ТК

23

Re: Помощь в составлении регулярных выражений

SeoNizator, помоему ты сам себе усложнил задачу, вот Guga все понял и ответил сразу в тему. так что твоей подписью тут не отделаешься.
я упростил задачу, есть текст у нас #title#Смотреть видео голые знаменитости#title#
мне нужно импортировать текст находящийся между #title# и #title#, как предложил Guga,я пробовал использовать выражение #title#(.*?)#title#, но оно почему-то оставило в тексте #title#
может кто подскажет другие варианты составления выражения

24

Re: Помощь в составлении регулярных выражений

gromhold пишет:

выражение #title#(.*?)#title#, но оно почему-то оставило в тексте #title#
может кто подскажет другие варианты составления выражения

может тогда не париться :) и
мультизаменой доочистить текст и сохранить это правило

либо пройтись еще раз заменой

найти #title#(.*?)#title# заменить на $0

Мне нравиться работать с Textkit.
Мой блог технологии для SEO

25

Re: Помощь в составлении регулярных выражений

Guga, спасибо за помощь. буду пробовать разные варианты