Регулярные выражения на все случаи жизни

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Собираем народный список регулярок (regex) на все случаи жизни, начну первым. У кого есть свои - закидывайте, добавлю в первый пост указав автора. Регулярки бывает могут работать не правильно, если что отписывайтесь в этой теме - найдём решение.

Список регулярных выражений и типовых контекстов использования
Поиск числа больше 0
Код:
(?<=(\D|^))[1-9]\d*
Вариант использования:
regex_width.png


в этом примере ищутся строго видимые элементы, невидимые же (имеющие ширину 0px) игнорируются, но иногда бывают осечки - когда сайт слоями накладывает элементы (встречается например в гугле).

Благодарим: CSS, ZennoScript
Разбор текста на предложения, кажется автора ZennoScript, немного мной доработано
Код:
[А-ЯA-Z].{15,}?(\.|\!|\?)(?=\ |\r|\n|$)
пример работы, на входе:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce dapibus tellus nec nulla gravida, sed congue nunc hendrerit. Integer interdum elementum lorem id rutrum. Ut sit amet interdum mauris. Phasellus mollis ex eleifend lacus molestie dictum. Fusce blandit, ligula non condimentum maximus, massa nisi ullamcorper odio, et vehicula nisl nunc nec orci. Sed neque diam, gravida eu blandit ullamcorper, porttitor non lorem. Etiam sagittis diam a dolor feugiat placerat. Suspendisse enim turpis, imperdiet in tellus sit amet, consectetur porta magna. Suspendisse odio nulla, imperdiet eget augue in, pulvinar hendrerit nunc. Aenean ut cursus tellus, nec vehicula ante. Vestibulum ornare erat non ante tempus, eu aliquet felis dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris eget arcu imperdiet, laoreet erat non, imperdiet leo. Sed arcu mi, ornare non leo sed, faucibus semper nunc.
на выходе:
sent.png


Благодарим: ZennoScript
Поиск слова начинающегося с определённого текста (благодарим ZennoScript за доработку)
Код:
(?i)\bgo.*?(?=\W|\ |\r|\n|$)
найдёт в тексте все слова начинающиеся на go, например: goal, god, google

Благодарим: CSS, ZennoScript
Ищет число в диапазоне 400-699:
Код:
^([4-6][0-9][0-9])$
подробнее про диапазоне можно посмотреть здесь http://www.regular-expressions.info/numericranges.html

Поделился: CSS
Виртуальные колонки с разделителем ";"
Код:
(?<=(^|;)).*?(?=(;|$|\r\n))
на входе: name;pass;mail
на выходе: нужная вам "колонка" по номеру совпадения:
col.png

вариант использования: работаем со списком, разбираем по кускам колонки как в таблице

Поделился: CSS
Получить имя файла из пути windows:
Код:
([^\\]+$)
на входе:
С:\Program Files (x86)\ZennoLab\ZennoPoster Pro\Progs\ZennoPoster.exe
на выходе: ZennoPoster.exe

Поделился: CSS
Поиск строк НЕ содержащих указанную (под)строку:
Код:
(?<=(^|\r\n))((?!(test)).)*(?=($|\r\n))
на входе:
на выходе:
Поделился: CSS
Взять все строки больше 18 символов
Код:
(?<=(\r\n|^)).{18,}(?=(\r\n|$))
Благодарим: alekwuy
Взять все строки до 18 символов
Код:
(?<=(\r\n|^)).{1,18}(?=(\r\n|$))
Благодарим: alekwuy
Поиск всех HTML тегов
Код:
<.*?>
Вариант использования - очистка текста от HTML кода

Благодарим: Trader1985
Поиск всех пустых строк в тексте
Код:
\n\r
Вариант использования - приведение текста в порядок

Благодарим: Trader1985
Поиск от трёх и более пустых строк
Код:
(?<=(\r\n){2})(\r\n){1,}
Вариант использования - приведение текста в порядок в случае когда нас устраивает 2 пустые строки

Благодарим: Trader1985
Email:
Код:
[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}
IP
Код:
(\d{1,3}\.){3}\d{1,3}
URL
Код:
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?
IP:PORT (например для парсинга прокси)
Код:
(\d{1,3}\.){3}\d{1,3}:\d*
Благодарим: up_lvl
[TBODY] [/TBODY]
 
Категория
Полезно

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

Последнее редактирование модератором:

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
(?<=(\r\n|^)).{18,}(?=(\r\n|$)) такая регулярка возьмет все строки, в которых больше 18 символов, а такая где до 18 включительно:
(?<=(\r\n|^)).{0,18}(?=(\r\n|$))
точно не помню где взял)
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
точно не помню где взял)
Добавлено!

Если вдруг у кого криво работает регулярка - в этой теме напишите, придумаем решение. Очень часто регулярки могут спотыкаться когда к примеру текст идёт в одну строку без переносов строк.
 
  • Спасибо
Реакции: alekwuy

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
  1. ^[1-9][0-9]*$ Это можно заменить просто на [1-9]\d*, тогда не будет никаких осечек.
  2. (?i)go.*?(?=\ |\r|\n|$) - это меняем на (?i)\bgo.*?(?=\W|\ |\r|\n|$) Так будет более правильно.
  3. http://ZennoScript.com/ru/tutorial/tutorials/regex - видеоролик Вам в помощь!
 
Последнее редактирование:

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
  1. ^[1-9][0-9]*$ Это можно заменить просто на [1-9]\d*, тогда не будет никаких осечек.
  2. (?i)go.*?(?=\ |\r|\n|$) - это меняем на (?i)\bgo.*?(?=\W|\ |\r|\n|$) Так будет более правильно.
  3. http://ZennoScript.com/ru/tutorial/tutorials/regex - видеоролик Вам в помощь!
1. По осечкам - обновил информацию в первом посте. Не нравится ни этот код, ни тот что в первом посте, этот не нравится тем что находит при 010 => 10, а тот что в первом посте тем что после упрощения начинает точно также работать
2. Очень хорошая реализация, добавлена в первый пост
3. Ссылки пока что не определил куда складировать, подумаем
 
Последнее редактирование модератором:

Trader1985

Client
Регистрация
14.12.2011
Сообщения
131
Благодарностей
31
Баллы
28
Вот, есть для текста, спрашивал когда-то у местных гуру:

<.*?> – поиск всех html тегов, например, чтобы спарсенный текст очистить от кода.
\n\r - поиск всех пустых строк
(?<=(\r\n){2})(\r\n){1,} – поиск от трёх и более пустых строк. Подойдёт для создания более "красивого" текста - убирает лишние пустые строки
 
  • Спасибо
Реакции: vadim4ukr, Greez и CSS

confirm2315

Новичок
Регистрация
26.01.2015
Сообщения
27
Благодарностей
10
Баллы
3
XML тэг
За открывающей скобкой < должно стоять слово из букв — имя элемента, затем могут быть атрибуты — любые символы, кроме закрывающей скобки >. Далее — любой текст (содержимое) и закрывающий тэг, т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).

Паттерн:/^<([a-z]+)([^>]+)*(?:>(.*)<\/\1>|\s+\/>)$/
 
  • Спасибо
Реакции: CSS

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
XML тэг
За открывающей скобкой < должно стоять слово из букв — имя элемента, затем могут быть атрибуты — любые символы, кроме закрывающей скобки >. Далее — любой текст (содержимое) и закрывающий тэг, т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).

Паттерн:/^<([a-z]+)([^>]+)*(?:>(.*)<\/\1>|\s+\/>)$/
notepad++ вместе со встроенным regex тестером глубоко задумались, так глубоко что мне не удалось дождаться завершения на небольшом тестовом html коде
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Вот, есть для текста, спрашивал когда-то у местных гуру:

<.*?> – поиск всех html тегов, например, чтобы спарсенный текст очистить от кода.
\n\r - поиск всех пустых строк
(?<=(\r\n){2})(\r\n){1,} – поиск от трёх и более пустых строк. Подойдёт для создания более "красивого" текста - убирает лишние пустые строки
Благодарю! Добавлено в первый пост
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
подскажите регулярку.
Нужно с строки удалить первые 6 символов.
Символы маленькие английские буквы
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
  • Спасибо
Реакции: i_zebro и svaminar

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
1. По осечкам - обновил информацию в первом посте. Не нравится ни этот код, ни тот что в первом посте, этот не нравится тем что находит при 010 => 10, а тот что в первом посте тем что после упрощения начинает точно также работать
Не видел, чтобы встречались значения ширины или высоты вида 010, это можно обойти добавив символ ^[1-9]\d* или же вообще указать просто [^0] т.е. это будет означать, что число не начинается с нуля.
По поводу наслаивающихся элементов - тут этим просто так не решить, для этого нужно искать необходимые атрибуты для поиска. Их всегда можно правильно подобрать, нужно только внимательно посмотреть на коды элементов, так же это можно регулировать номерами совпадения, т.е. устанавливать, чтобы заполнялся последний элемент, он как правило находится сверху.
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Не видел, чтобы встречались значения ширины или высоты вида 010, это можно обойти добавив символ ^[1-9]\d* или же вообще указать просто [^0] т.е. это будет означать, что число не начинается с нуля.
Ширина и высота это просто пример использования регулярки, сама регулярка подразумевает поиск числа, а не последовательности цифр, однако ищет именно последовательность цифр начинающуюся не с нуля.

Можете попробовать написать регулярку которая на входе пример:
Код:
0
001
100
200
и на выходе выдаст:
Код:
100
200
В таком случае она будет выполнять заявленную задачу, и можно будет её обновить в первом посте.

По поводу наслаивающихся элементов - тут этим просто так не решить, для этого нужно искать необходимые атрибуты для поиска. Их всегда можно правильно подобрать, нужно только внимательно посмотреть на коды элементов, так же это можно регулировать номерами совпадения, т.е. устанавливать, чтобы заполнялся последний элемент, он как правило находится сверху.
Решение всему есть, и мне это известно также как и вам. Данная информация об осечке служит лишь целью предупредить людей чтобы они знали её ограничения.
 
Последнее редактирование модератором:

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
Ширина и высота это просто пример использования регулярки, сама регулярка подразумевает поиск числа, а не последовательности цифр, однако ищет именно последовательность цифр начинающуюся не с нуля.

Можете попробовать написать регулярку которая на входе пример:
Код:
0
001
100
200
и на выходе выдаст:
Код:
100
200
В таком случае она будет выполнять заявленную задачу, и можно будет её обновить в первом посте.


Решение всему есть, и мне это известно также как и вам. Данная информация об осечке служит лишь целью предупредить людей чтобы они знали её ограничения.
Например так (?<=(\D|^))[1-9]\d*
Опять же - эти вещи можно крутить как угодно, главное понимать что именно нужно.
 
  • Спасибо
Реакции: CSS

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
 
Последнее редактирование:

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Последнее редактирование модератором:

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
Выложи что на входе, и что нужно получить на выходе, сейчас задача не совсем понятна, похоже что тут смешана задача с парсингом (regex) и с сортировкой (C#)
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
Просто получаете все значения в список и после этого сортируете строки в списке по возрастанию.
 

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
сортируете строки в списке по возрастанию.
Вчера так и сделал, но потом дошло что можно сделать на C# Regex после чего отсортировать и всё это в одном флаконе..
Выложи что на входе, и что нужно получить
Примерно то что сказал ZennoScript, но вы правы, все это можно спарсить и сразу отсортировать в одном экшине. Эх, не дошло сразу :dy:Сори за флуд)
 
Последнее редактирование модератором:
  • Спасибо
Реакции: IndaLab

up_lvl

Client
Регистрация
02.09.2014
Сообщения
131
Благодарностей
53
Баллы
28
  • Спасибо
Реакции: in-touch, LightWood и CSS

Vega$

Client
Регистрация
18.09.2015
Сообщения
9
Благодарностей
0
Баллы
1
Доброго дня, только начинаю разбираться с зеннопостером. Вопрос по регулярным выражениям. Собраю через DOM нужное значение и кладу его в переменную. Но в таблицу из переменной это значение не уходит, предполагаяю из-за того что в переменной, значение получается с пробелами перед самим значением. Как доработать регулярное выражение, чтобы очистить получаемые данные от пробелов. Значение 1,2 и более слов, плюс даты попадаются. Выражение выглядит вот так (?<=\ Город:&nbsp;</div>)[\w\W]*?(?=</div>). Данные приходят такие \\\\\\\\\Петропавловск Камчатский\\\
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Добавляйте в список, поток в цикле из списка берите построчно и к каждому значению применяйте Операции с текстом- Trim перед сохранением в другом месте
 

Vega$

Client
Регистрация
18.09.2015
Сообщения
9
Благодарностей
0
Баллы
1
Добавляйте в список, поток в цикле из списка берите построчно и к каждому значению применяйте Операции с текстом- Trim перед сохранением в другом месте
Спасибо, попмогло, только я не стал список подключать, применяю этот экшен к переменной и в нее же записываю данные.
 

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
301
Благодарностей
49
Баллы
28
Друзья, подскажите, пожалуйста каким образом из этой конструкции можно вытянуть только текст, заключённый в тег <a>?
В данном случае нужно "Keep Watch Beanie (Black/Green)"

<h2 class="field field-name-title-field field-type-text field-label-hidden">
<a href="/clothing/keep-watch-beanie-blackgreen">Keep Watch Beanie (Black/Green)</a> </h2>

+ в Карму всем откликнувшимся!)
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Друзья, подскажите, пожалуйста каким образом из этой конструкции можно вытянуть только текст, заключённый в тег <a>?
В данном случае нужно "Keep Watch Beanie (Black/Green)"

<h2 class="field field-name-title-field field-type-text field-label-hidden">
<a href="/clothing/keep-watch-beanie-blackgreen">Keep Watch Beanie (Black/Green)</a> </h2>

+ в Карму всем откликнувшимся!)
с помощью экшена Обработка текста - Замена, в режиме Regex: <[^>]*> заменить на пустоту..
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Друзья, подскажите, пожалуйста каким образом из этой конструкции можно вытянуть только текст, заключённый в тег <a>?
В данном случае нужно "Keep Watch Beanie (Black/Green)"

<h2 class="field field-name-title-field field-type-text field-label-hidden">
<a href="/clothing/keep-watch-beanie-blackgreen">Keep Watch Beanie (Black/Green)</a> </h2>

+ в Карму всем откликнувшимся!)
(?<=<a.*>)[\w\W]*?(?=</a>)
Можно такой регуляркой
 

gnomza75

Client
Регистрация
17.08.2015
Сообщения
146
Благодарностей
29
Баллы
28
ребята подскажите с регуляркой нужен пробел. задача экшен обработка текста в переменной состоящей из нескольких- слов пример_такой_пример , с помощью замены регексом заменить нижнее подчеркивание на пробел. пробовал менять так \s в текст пишется \
при выставлении просто пробела с клавиатуры, экшен работает правильно только до перезагрузки программы. при следующем запуске проэкта поле замены пробелом заменяется на пустоту,
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Попробуйте пробел в переменную положить и её прописать в замене
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
ребята подскажите с регуляркой нужен пробел. задача экшен обработка текста в переменной состоящей из нескольких- слов пример_такой_пример , с помощью замены регексом заменить нижнее подчеркивание на пробел. пробовал менять так \s в текст пишется \
при выставлении просто пробела с клавиатуры, экшен работает правильно только до перезагрузки программы. при следующем запуске проэкта поле замены пробелом заменяется на пустоту,
Не пробовали вместо пробела писать макрос {-String.Space-}? По-моему в Вашем случаем самое то.
 
  • Спасибо
Реакции: gnomza75 и CSS

Vega$

Client
Регистрация
18.09.2015
Сообщения
9
Благодарностей
0
Баллы
1
Друзья помогите, забираю текст через DOM, сразу в список. Но Первое слово в нужном мне абзаце выделено жирным, соответственно текст я получаю такого вида - текст </strong> текст текст. Как изменить регулярное выражение, чтобы при парсинге страницы убрать этот тег. Регулярка выглядит так (?<=<div\ class="text"><strong>)[\w\W]*?(?=</div>). В нужном тексте нужны по идее только цифры и кирилица.
 

Кто просматривает тему: (Всего: 6, Пользователи: 0, Гости: 6)