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/ ваш лучший друг во всем