April 21, 2022

Regex – что это и нафиг надо?

Каждый явно сталкивался с кучей данных в текстовом формате при покупке аккаунтов или обработке логов. Если хочется засунуть данные в таблицы Excel, то надо данные так представить, чтобы прокси запихать в программу – иначе. Регулярные выражения (далее регулярки, regex) позволяют находить заданные паттерны в тексте, их поддержка есть во многих редакторах кода, в notepad++, notepad их нет :(

К делу.

Есть много вариантов использования regex, я решил показать пару вариантов, которые использую я “в быту”, чтобы вас как-то заинтересовать. Есть много статей, посвященных регулярным выражениям, если вам лень писать что-то свое, изучать, хочется быстро узнать ответ – вбиваем в гугл фразу “regex how to” и свой вопрос кратко, да, желательно на английском.

Базовые вещи, которые пригодятся (можете поверхностно прочитать):

.* - любое количество любых символов
\d – цифра
\D – не цифра
\s – пробельный символ
\S – не пробельный символ
\w – буквенный символ или нижнее подчеркивание
\W – не то, что в статье строкой выше
\n – разрыв строки
(abcde) – группировка символов (как в математике)
(abcde)? – ноль или одно повторение конструкции abcde
(abcde)* - ноль или более
(abcde)+ – одно или более

Пример 1. Аккаунты в Excel.

Например, купили мы почты (штук 50+) на какой-то площадке ОТС, accsmarket и т.п. и хотим их без гемора поместить в excel табличку со своими аккаунтами. Для того открываем самый большой чат кодеров и умоляем помочь вам VSCode, Sublime Text 3 или что-то еще и вставляем аккаунты:

Основным инструментом будет поиск с заменой, открывается в большинстве редакторов сочетанием клавиш CTRL+H. На примере VSCode в появившемся окошке жмем стрелку вниз и получаем такое меню:

Первая строчка отвечает за поиск паттерна, вторая за его замену на что-то.

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

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

Взглянув на наши аккаунты, можем заметить, что почты и пароли чередуются, причем иногда пароли имеют приписку password: или pass:. Руками явно не захочется обрабатывать кучи строк кода, да еще и ошибиться где-то случайно, потенциально потеряв аккаунт в будущем.

Явно можно выделить факт, что приписки password: и pass: начинаются с pas и заканчиваются на двоеточие.
Строки с паролями стоят под почтами, что нам позволяет их отличить, поэтому стереть лишнюю информацию по обозначению пароля. Регулярное выражение pas.*: выбирает любые цепочки символов, которые начинаются с pas, а заканчиваются на двоеточие. Заносим его в первую строку окошка, вторую оставляем пустой, жмем заменить все:

После этого у нас пропадают все не нужные приписки к паролю:

Теперь мы хотим наши данные привести к виду почта:пароль, чтобы занести их в таблицу Excel или какие-то конфиги для софта. Для этого (без усложнений сложными регулярками) заменяем конец почты com и символ разрыва строки на com и двоеточие. Т.е. мы прилепим к почтам, которые заканчиваются на com, через двоеточие пароли.

Далее берем эти данные и куда надо вставляем. В Excel’е это делается так:

Вставка ^

Не убирая выделение, в поиске пишем “таблицу” или “table” и выбираем конвертацию в таблицу:

Жмем далее:

Выбираем “другое”, если нашего символа в списке нет и печатаем свой разделитель. В превью будет видно как разделяются данные:

Жмем далее, завершить.

Получаем данные в двух столбцах.

Пример 2. Аккаунты в Python.

Допустим теперь мы хотим эти аккаунты задействовать у нас в коде, но без парсинга файла. Отформатируем их в виде массива. Для этого используем тот факт, что они уже записаны через двоеточие, будем представлять каждый аккаунт как массив из двух элементов - логина и пароля. Берем 2 конструкции (.*), которые находятся с двух сторон от двоеточия (.*):(.*)

Теперь сделаем, чтобы первая и вторая группы после замены лежали в массиве, добавим кавычки и запятую в конце ['$1','$2'],

Далее просто добавляем в начале и в конце еще одни квадратные скобки, удаляем разрывы строк \n и присваиваем это переменной.

Теперь это можно вставлять в код и использовать (но лучше выносить все в файлы конфига, чтобы потом не приходилось вырезать все важные данные из кода).

Пример 3. Разное.

Выделение чего угодно между одинарными кавычками '(.*?)'

Очистка пустых строк \n\n заменяем на \n и жмем замену пару раз

Заключение

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

Полезные ссылки

https://regex101.com/ потыкать регулярки онлайн

https://habr.com/ru/post/545150/ хороший (наверно) гайд

https://regexlib.com/ различные регулярки по ключевым словам

https://www.google.com/ ваш лучший друг во всем