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

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
Собираем народный список регулярок (regex) на все случаи жизни, начну первым. У кого есть свои - закидывайте, добавлю в первый пост указав автора. Регулярки бывает могут работать не правильно, если что отписывайтесь в этой теме - найдём решение.

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


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

Благодарим: CSS, ZennoScript
Разбор текста на предложения, кажется автора ZennoScript, немного мной доработано
Code:
[А-Я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 за доработку)
Code:
(?i)\bgo.*?(?=\W|\ |\r|\n|$)
найдёт в тексте все слова начинающиеся на go, например: goal, god, google

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

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

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

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

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

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

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

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

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

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

Last edited by a moderator:

alekwuy

Client
Joined
Apr 6, 2013
Messages
1,632
Reaction score
461
Points
83
(?<=(\r\n|^)).{18,}(?=(\r\n|$)) такая регулярка возьмет все строки, в которых больше 18 символов, а такая где до 18 включительно:
(?<=(\r\n|^)).{0,18}(?=(\r\n|$))
точно не помню где взял)
 

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
точно не помню где взял)
Добавлено!

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

ZennoScript

Moderator
Joined
Mar 4, 2011
Messages
4,452
Reaction score
1,888
Points
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 - видеоролик Вам в помощь!
 
Last edited:

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
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. Ссылки пока что не определил куда складировать, подумаем
 
Last edited by a moderator:

Trader1985

Client
Joined
Dec 14, 2011
Messages
133
Reaction score
31
Points
28
Вот, есть для текста, спрашивал когда-то у местных гуру:

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

confirm2315

Новичок
Joined
Jan 26, 2015
Messages
27
Reaction score
10
Points
3
XML тэг
За открывающей скобкой < должно стоять слово из букв — имя элемента, затем могут быть атрибуты — любые символы, кроме закрывающей скобки >. Далее — любой текст (содержимое) и закрывающий тэг, т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).

Паттерн:/^<([a-z]+)([^>]+)*(?:>(.*)<\/\1>|\s+\/>)$/
 
  • Thank you
Reactions: CSS

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
XML тэг
За открывающей скобкой < должно стоять слово из букв — имя элемента, затем могут быть атрибуты — любые символы, кроме закрывающей скобки >. Далее — любой текст (содержимое) и закрывающий тэг, т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).

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

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
Вот, есть для текста, спрашивал когда-то у местных гуру:

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

svaminar

Client
Joined
Aug 21, 2013
Messages
834
Reaction score
379
Points
63
подскажите регулярку.
Нужно с строки удалить первые 6 символов.
Символы маленькие английские буквы
 

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
подскажите регулярку.
Нужно с строки удалить первые 6 символов.
Символы маленькие английские буквы
Code:
^[a-z]{6}
 

ZennoScript

Moderator
Joined
Mar 4, 2011
Messages
4,452
Reaction score
1,888
Points
113
1. По осечкам - обновил информацию в первом посте. Не нравится ни этот код, ни тот что в первом посте, этот не нравится тем что находит при 010 => 10, а тот что в первом посте тем что после упрощения начинает точно также работать
Не видел, чтобы встречались значения ширины или высоты вида 010, это можно обойти добавив символ ^[1-9]\d* или же вообще указать просто [^0] т.е. это будет означать, что число не начинается с нуля.
По поводу наслаивающихся элементов - тут этим просто так не решить, для этого нужно искать необходимые атрибуты для поиска. Их всегда можно правильно подобрать, нужно только внимательно посмотреть на коды элементов, так же это можно регулировать номерами совпадения, т.е. устанавливать, чтобы заполнялся последний элемент, он как правило находится сверху.
 

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
Не видел, чтобы встречались значения ширины или высоты вида 010, это можно обойти добавив символ ^[1-9]\d* или же вообще указать просто [^0] т.е. это будет означать, что число не начинается с нуля.
Ширина и высота это просто пример использования регулярки, сама регулярка подразумевает поиск числа, а не последовательности цифр, однако ищет именно последовательность цифр начинающуюся не с нуля.

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

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

ZennoScript

Moderator
Joined
Mar 4, 2011
Messages
4,452
Reaction score
1,888
Points
113
Ширина и высота это просто пример использования регулярки, сама регулярка подразумевает поиск числа, а не последовательности цифр, однако ищет именно последовательность цифр начинающуюся не с нуля.

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


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

proffman

Client
Joined
Jan 24, 2013
Messages
547
Reaction score
51
Points
28
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
 
Last edited:

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
Last edited by a moderator:

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
Выложи что на входе, и что нужно получить на выходе, сейчас задача не совсем понятна, похоже что тут смешана задача с парсингом (regex) и с сортировкой (C#)
 

ZennoScript

Moderator
Joined
Mar 4, 2011
Messages
4,452
Reaction score
1,888
Points
113
А как сделать такую регулярку? Например, есть строки которые начинаются из символов а после них идет http - 353http://. Просто взять это мелочь, а вот как брать сначала те строки в которых число поменьше (отсортировать в числовом диапазоне). Например, первое совпадение 100http:// должно иметь приоритет выше чем 353http://, и так со всеми строками по порядку. Можно от 100 до 5000, а можно от 0 без разницы :-)
Просто получаете все значения в список и после этого сортируете строки в списке по возрастанию.
 

proffman

Client
Joined
Jan 24, 2013
Messages
547
Reaction score
51
Points
28
сортируете строки в списке по возрастанию.
Вчера так и сделал, но потом дошло что можно сделать на C# Regex после чего отсортировать и всё это в одном флаконе..
Выложи что на входе, и что нужно получить
Примерно то что сказал ZennoScript, но вы правы, все это можно спарсить и сразу отсортировать в одном экшине. Эх, не дошло сразу :dy:Сори за флуд)
 
Last edited by a moderator:
  • Thank you
Reactions: IndaLab

up_lvl

Client
Joined
Sep 2, 2014
Messages
133
Reaction score
54
Points
28
IP
Code:
(\d{1,3}\.){3}\d{1,3}
Можно ещё добавить IP:PORT (зачастую для проксей)
(\d{1,3}\.){3}\d{1,3}:\d*
 

Vega$

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

rostonix

Известная личность
Joined
Dec 23, 2011
Messages
29,067
Reaction score
5,719
Points
113
Добавляйте в список, поток в цикле из списка берите построчно и к каждому значению применяйте Операции с текстом- Trim перед сохранением в другом месте
 

Vega$

Client
Joined
Sep 18, 2015
Messages
9
Reaction score
0
Points
1
Добавляйте в список, поток в цикле из списка берите построчно и к каждому значению применяйте Операции с текстом- Trim перед сохранением в другом месте
Спасибо, попмогло, только я не стал список подключать, применяю этот экшен к переменной и в нее же записываю данные.
 

ParfeniyAnton

Client
Joined
Aug 24, 2014
Messages
304
Reaction score
50
Points
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
Staff member
Joined
Sep 5, 2012
Messages
21,041
Reaction score
9,364
Points
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
Joined
Aug 27, 2013
Messages
848
Reaction score
532
Points
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
Joined
Aug 17, 2015
Messages
146
Reaction score
29
Points
28
ребята подскажите с регуляркой нужен пробел. задача экшен обработка текста в переменной состоящей из нескольких- слов пример_такой_пример , с помощью замены регексом заменить нижнее подчеркивание на пробел. пробовал менять так \s в текст пишется \
при выставлении просто пробела с клавиатуры, экшен работает правильно только до перезагрузки программы. при следующем запуске проэкта поле замены пробелом заменяется на пустоту,
 

CSS

Client
Joined
May 22, 2010
Messages
1,327
Reaction score
664
Points
113
Попробуйте пробел в переменную положить и её прописать в замене
 

evgen_po

Client
Joined
Aug 27, 2013
Messages
848
Reaction score
532
Points
93
ребята подскажите с регуляркой нужен пробел. задача экшен обработка текста в переменной состоящей из нескольких- слов пример_такой_пример , с помощью замены регексом заменить нижнее подчеркивание на пробел. пробовал менять так \s в текст пишется \
при выставлении просто пробела с клавиатуры, экшен работает правильно только до перезагрузки программы. при следующем запуске проэкта поле замены пробелом заменяется на пустоту,
Не пробовали вместо пробела писать макрос {-String.Space-}? По-моему в Вашем случаем самое то.
 
  • Thank you
Reactions: gnomza75 and CSS

Vega$

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

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)