Simulative – Telegram
7.37K subscribers
1.71K photos
71 videos
1 file
1.27K links
Привет! Мы — образовательная платформа в сфере аналитики Simulative: simulative.ru

Создаём курсы-симуляторы, где обучаем не на «апельсинках», а на кейсах из реального бизнеса.

Наш уютный чат: @itresume_chat
Поддержка: @simulative_support
Download Telegram
🪄 Волшебство магических методов в Python

В мире Python существуют методы, которые называются "магическими", потому что они позволяют определить специальное поведение объектов. Эти методы работают скрыто, но оказывают огромное влияние на наш код.

Один из первых магических методов, с которым мы сталкиваемся - это __init__. Он вызывается при создании нового объекта класса и позволяет инициализировать атрибуты объекта.

class Cat:
def __init__(self, name):
self.name = name

def __str__(self):
return f"Я кот {self.name}"

cat = Cat("Буся")
print(cat)
# Я кот Буся

Здесь мы создали класс
Cat и определили метод __init__, который принимает аргумент name и устанавливает его в атрибут name.

Мы также переопределили метод __str__, чтобы получать информативное строковое представление объекта при его выводе.

Магический метод str используется для определения текстового представления объекта. Этот метод вызывается, когда вы пытаетесь преобразовать объект в строку с помощью встроенной функции str() или когда объект используется в контексте, где ожидается строковое представление, например, при выводе на экран с помощью print().


Еще одним распространенным магическим методом является __repr__. Он похож на __str__, но предназначен для возвращения представления объекта, которое можно использовать для его точного воссоздания. Обычно используется для отладки и представления объектов в консоли.

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __repr__(self):
return f"Point({self.x}, {self.y})"

point = Point(2, 3)
print(point) # Point(2, 3)


Здесь класс Point представляет точку на плоскости, и метод __repr__ возвращает строку, содержащую код для создания точки, что точно пригодится для отладки.

Магические методы играют важную роль и при сравнении объектов операторами сравнения ( ==, <, >). Для каждого из таких операторов есть свой магический метод.

class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height

def __eq__(self, other):
return self.width == other.width and self.height == other.height

def __lt__(self, other):
return self.area() < other.area()

def area(self):
return self.width * self.height

rect1 = Rectangle(4, 5)
rect2 = Rectangle(4, 5)
rect3 = Rectangle(3, 6)

print(rect1 == rect2) # True
print(rect1 < rect3) # False


В этом примере мы переопределили метод __eq__, чтобы сравнивать два прямоугольника на основе их ширины и высоты, и метод __lt__, чтобы сравнивать их по площади.

Кроме сравнения, магические методы также используются:

- для арифметических операций (сложения, вычитания и умножения),
- для создания контекстных менеджеров (которые позволяют управлять ресурсами и выполнением кода в блоке) ,
- для создания собственных итерируемых объектов.

Также магические методы позволяют контролировать процесс сериализации и десериализации объектов и многое другое.

Магические методы в Python предоставляют мощные возможности для определения поведения объектов и помогают создавать чистый и читаемый код. Пользуйтесь ими с умом! 🎩🐍

#python
10🔥6😢2👍1
Стрим по SQL: Решение задач повышенной сложности 🔥

Недавно мы проводили стрим и решали задачи повышенной сложности по SQL, которые вызывали затруднение более чем у 500 человек 😱

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

🔗 Чтобы получить запись стрима, просто перейдите по ссылке
🔥17👍32
Ошибка в SQL - не использовать COALESCE 🔥

COALESCE - это оператор, который принимает несколько значений и возвращает первое, которое не является NULL. Если все значения NULL, он вернет NULL.

COALESCE полезен, чтобы избежать случайных пропусков в вычислениях. Такие пропуски могут быть трудно заметить, особенно при вычислении средних значений на основе большого набора данных. Обычно пропуски заполняют средними, минимальными, максимальными, медианными или средними значениями, или с использованием интерполяции - это зависит от задачи.

Давайте рассмотрим пример из реального бизнеса. У нас есть таблица клиентов (clients), и в поле name хранятся имена пользователей.

Отдел маркетинга решил создать email-рассылку, начинающуюся с фразы: "Приветствуем, имя_пользователя!" Однако, если поле name содержит NULL, фраза становится "Приветствуем, !". Сами представляете выражение лица клиента, когда ему приходит такое письмо…

В таких случаях COALESCE может прийти на помощь:

SELECT COALESCE(name, 'Дорогой друг') 
FROM clients


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

✔️ Хотите стать крутым аналитиком данных? Приглашаем вас на персональную экскурсию в Симулятор - мы расскажем, как это сделать: simulative.ru/excursion

#sql
🔥11🤩63👍3
3 полезных функции для работы с Pandas 🔥

Pandas - огромный фреймворк для анализа данных и в нем много встроенных методов. Это позволяет решать даже специфические задачи, не прибегая при этом к написанию большого количества кода.

Сегодня мы рассмотрим несколько очень удобных, но при этом неочевидных методов Pandas: stack, set_option, insert.

Для начала создадим таблицу, которая содержит название города, среднюю температуру в °C, скорость ветра в м/с

import pandas as pd
multi_col = pd.MultiIndex.from_tuples(
[('Temperature', '°C'),
('Wind', 'm/s')])

df = pd.DataFrame(columns=multi_col,
index=['Тюмень','Москва','Краснодар'],
data=[[5, 2], [10, 5], [20, 1]])



1️⃣ STACK


Давайте теперь переформатируем эту таблицу так, чтобы строки были разбиты не только по городам, но еще и по типу измерения (Температура/Скорость ветра).

По столбцам будут единицы измерения, а в ячейках таблицы - соответствующие значения.

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

В stack есть параметр level - уровни стекинга. Список «уровней», которые мы хотим перекинуть с оси столбцов на ось индекса. Например, если передать только 0 уровень, то в ось индекса попадут Типы измерений.

df.stack(level = 0)


Если же передать список уровней [0, 1], то все уровни с оси столбцов перейдут в индекс.

df.stack(level = [0, 1])


2️⃣ SET_OPTION


Каждый раз при просмотре большого датафрейма приходится писать df.head(5), чтобы вывести только первые строки!


Знакомая ситуация? Думаем, да.

Чтобы сделать работу с Pandas более приятной и избавиться от дубляжей в коде, можно воспользоваться методом set_option. Он позволяет заменить стандартные настройки Pandas на свои кастомные, настроив отдельные аспекты под себя.

Для начала рекомендуем прописать все необходимые конфигурации. Например:

display_settings = {
# max кол-во столбцов для отображения
'max_columns': 10,
# max кол-во строк для отображения
'max_rows': 1,
# количество цифр знаков после запятой
'precision': 0,
# отображение полного размера датасета
'show_dimensions': True
}


После этого устанавливаем настройки с помощью set_option:

for op, val in display_settings.items():
pd.set_option("display.{}".format(op), val)


В таком случае выведется только 1 строка, нет цифр после запятой и присутствует полный размер датасета (внизу).

Все как заказывали 😄

Примечание: Чтобы отменить настройки, используйте reset_option:

pd.reset_option("all", silent = True)


3️⃣ INSERT


Еще одна знакомая до боли задача:

Добавить новый столбец в середину или начало существующего датафрейма.


Зачастую эту задачу решают так:

- Создают новую колонку
- Добавляют в нее данные
- Сортируют вручную столбцы датафрейма в нужном порядке

Этого всего можно избежать, использовав метод insert. Он позволяет добавлять столбец в определенном месте, используя индекс столбца.

Например, добавим новый столбец Скорость ветра в км/ч в самое начало нашего датафрейма:

df.insert(0, ('Wind_km', 'km/h'),
df[('Wind', 'm/s')]/1000*3600)

Все результаты команд смотрите в карточках под постом!)

Хотите прокачать свои навыки на реальных бизнес-кейсах? Записывайтесь на наш бесплатный курс по Pandas: simulative.ru/pandas

#python #pandas
👍14🔥73
14
Приглашаем на персональную эксурсию в Симулятор 🔥

Наверняка вы много времени тратите на обучение - читаете статьи, решаете задачки, проходите курсы да и просто ищите информацию. Но путь в аналитику все еще не закончен - есть непонятные темы, «белые пятна», а с собеседований приходят отказы. Есть такое?

Тогда вместо часа чтения обучающих статей и просмотра видео проведите этот час с нами в Симуляторе «Аналитик данных»!

Мы сапожники с сапогами: наша команда несколько раз с нуля отстраивала аналитику в крупных компаниях, а сейчас мы строим сразу несколько data-driven компаний - нам есть, чем вас удивить!

За час в формате персонального созвона в Google Meet мы вам покажем и расскажем:

- Как выглядит идеальное портфолио (на примере реальных людей)
- Как выстроить обучение, чтобы максимально быстро устроиться аналитиком (даже с нуля)
- Почему SQL и Python - не основной навык аналитика


🔗 Чтобы записаться на персональную экскурсию прямо сейчас, просто перейдите по ссылке: simulative.ru/excursion
🔥42👍2
🔥 Долой длинные строки в Python

Во время код-ревью мы часто сталкиваемся с длинными строками кода, которые даже не влезают в экран. И казалось бы - они содержат настолько «стройную» информацию, что даже не знаешь, где (и зачем) поставить перенос на следующую строку.

Вот несколько случаев, где это встречается особенно часто:

* Длинные строки
* Большое количество аргументов в функции
*
method chaining в Pandas

Рассмотрим такой «длинный» код на примере Pandas. Согласитесь, выглядит жутко:

df = coderun[coderun["cohort"] >= "2022-01"].
groupby(["cohort", "language", "user_id"])["problem_id"].agg("nunique").
groupby(["cohort", "language"]).agg(np.mean).reset_index().pivot_table(
values="problem_id", columns=["language"], index=["cohort"])


А теперь давайте приведем код в порядок. Есть, как минимум, два метода борьбы с такими ситуациями.

🔵 Перенос строки с помощью обратного слеша


Достаточно поставить в конце строки обратный слеш и Python будет воспринимать весь написанный код как единую строку.

df = coderun[coderun["cohort"] >= "2022-01"] \
.groupby(["cohort", "language", "user_id"])["problem_id"] \
.agg("nunique") \
.groupby(["cohort", "language"]) \
.agg(np.mean) \
.reset_index() \
.pivot_table(values="problem_id", columns=["language"], index=["cohort"]


Сами видите - код стал в разы более читаемым и даже компактным.

🔵 Оборачивание круглыми скобками

Прием заключается в том, что мы просто оборачиваем все выражение в круглые скобки и это тоже рассматривается Python как одна строка кода.

df = (
coderun[coderun['cohort'] >= '2022-01']
.groupby(['cohort', 'language', 'user_id'])['problem_id']
.agg('nunique')
.groupby(['cohort', 'language'])
.agg(np.mean)
.reset_index()
.pivot_table(values='problem_id', columns=['language'], index=['cohort'])
)


На наш взгляд, этот вариант даже лучше - нет лишних символов и код выглядит еще более аккуратным.

- - - - -

Записывайтесь на наш бесплатный курс по Pandas: simulative.ru/pandas , чтобы прокачать свои навыки на реальных бизнес-кейсах!

#python #pandas
🔥22👍83
Кейс по SQL: Анализ продаж аптечной сети 🔥

Абсолютно любой бизнес сталкивается с потребностью расчета продуктовых метрик - ARPPU, LTV, Lifetime и другие. Если бизнес их не считает и не улучшает - он умирает. Поэтому навык расчета этих метрик в SQL для любого аналитика - абсолютный must have.

И недавно мы проводили закрытую трансляцию, где анализировали эти метрики на примере аптечной сети. А сегодня мы рады поделиться с вами записью этого кейса - там вас ждет только концентрация полезности, лайфхаков SQL и профессиональных приемов.

Скорее смотрите, чтобы не пропустить!

👉[ПОСМОТРЕТЬ КЕЙС]👈
7👍5🔥3
Собираем портфолио аналитика: когортный анализ LTV в SQL 🔥

Приглашаем вас на интенсив, где мы в прямом эфире будем проводить когортный анализ LTV в SQL на примере бонусной системы 🚀

📅 Дата и время: 13 декабря, 19:00 по Мск
🕘 Спикер: Андрон Алексанян, CEO Simulative / IT Resume


🔗 Ссылка для записи на интенсив: [ссылка]

По итогу интенсива вы:

- Глубоко разберетесь с LTV и механикой когортного анализа
- Научитесь писать красивый SQL-запрос для проведения когортного анализа
- Сформулируете бизнес-выводы на основании анализа
- Упакуете впечатляющий кейс в портфолио


Интенсив подойдет всем — от новичков и до тех, кто уже знаком с SQL и аналитикой.

В прямом эфире мы также расскажем об ошибках составления портфолио, правилах составления «продающего» портфолио, а также ошибках, которые делают абсолютно все начинающие аналитики.

Вас ждет только крутой контент и ничего больше, поэтому скорее нажимайте кнопку, чтобы записаться на интенсив 👇

🔗 Ссылка для записи на интенсив: [ссылка]
👍6🔥42
🔥 Продуктовая метрика LIFETIME

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

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

Это как раз показатель востребованности продукта, заинтересованности юзеров и, более того, «гарантия» их финансовой активности. И этот показатель - Lifetime.

Lifetime - это среднее время, в течение которого пользователь остается активным.

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

Как считать?

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

Есть несколько способов расчета lifetime.

🟢 Наиболее точный способ

Берем группу пользователей, ждем пока все они полностью «отвалятся», и считаем среднее количество времени, которое они провели с нами до ухода.

Например, у нас есть когорта из 100 пользователей, и мы знаем, сколько дней они провели в проекте прежде, чем покинули его:

|Кол-во клиентов|Кол-во дней|
| 30 | 1 |
| 20 | 7 |
| 10 | 14 |
| 10 | 18 |
| 10 | 22 |
| 5 | 31 |
| 5 | 40 |
| 5 | 45 |
| 5 | 54 |


В этом случае их lifetime равен 15,6 дням.

Но, чувствуете подвох? Расчет точного lifetime может занять достаточно много времени и это почти невозможно в реальной жизни, поскольку придется ждать, пока все пользователи окончательно прекратят использовать продукт.

Поэтому обычно мы, грубо говоря, оцениваем lifetime, а не считаем его. И при оценке мы опираемся в большей степени на retention.

🟡 Второй способ

Одним из способов оценить lifetime будет определение «точки невозврата», когда неактивные определенное количество дней (7, 14, 30) юзеры, считаются «отвалившимися».

🟣 Третий способ

Другой способ - вычисление интеграла от retention (поскольку lifetime - это площадь под кривой retention) или простое суммирование всех показателей retention. Для такого подсчета нам нужно знать retention за несколько дней, чем больше, тем лучше, так как это будет влиять на точность оценки.

Что нам дает lifetime?

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

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

При работе с lifetime обращайте внимание на сегментацию. Можно делить пользователей по-разному: по стране, полу, устройству, а можно делить по проведенному времени с продуктом. То есть отдельно посмотреть на поведение юзеров с lifetime = неделя, две, месяц - вы сможете увидеть зависимости и, скорее всего, понять причины оттока.

Разница между Lifetime и Lifetime Value

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

#analytics #продуктовые_метрики
👍7🔥71
🔥5
Напоминаем про интенсив 🔥

Напоминаем, что сегодня в 19:00 пройдет интенсив «Собираем портфолио аналитика: когортный анализ LTV в SQL».

По итогу интенсива вы:

- Глубоко разберетесь с LTV и механикой когортного анализа
- Научитесь писать красивый SQL-запрос для проведения когортного анализа
- Сформулируете бизнес-выводы на основании анализа
- Упакуете впечатляющий кейс в портфолио

Вас ждет только крутой контент и ничего больше, поэтому скорее нажимайте кнопку, чтобы записаться на интенсив👇🏻

🔗 Ссылка для записи на интенсив: [
ссылка]
👍5🔥41
Ошибка «поверхностных выводов» 😖

На связи Андрон, CEO Simulative 👋🏻 Общаясь со студентами нашего Симулятора (и другими людьми в целом) я постоянно встречаюсь с ошибкой «поверхностных выводов». Ее допускают и члены моей команды, и я сам, и другие опытные предприниматели, и наши студенты, и вообще все. Это особенность работы мозга: он пытается минимизировать трудозатраты и побыстрей решить сложную задачку. Но такая ошибка может привести к сливу миллионов рублей, поэтому очень важно ее фиксировать и гнать в шею (особенно, если вы аналитик).

Ошибка поверхностных выводов - это когда мы принимаем решение, т.к. оно кажется нам «очевидным». Но при дальнейшем исследовании выясняется, что мы совершили серьезную ошибку.

Давайте приведу показательный пример. Все цифры и метрики изменены из соображений конфиденциальности, но отображают общую картину.

Пример

Мы используем несколько маркетинговых воронок. Например, вебинарную и бесплатный курс. Вебинарную воронку мы продвигаем через посевы в Телеграме, и воронку бесплатного курса - через таргетированную рекламу. Начинается новый месяц и мы хотим вырасти х2 по выручке. Воронка бесплатного курса идет вяло (CR2 - 0.8%), а вот вебинары дают крутую конверсию (CR2 - 3.5%) - стоимость клиента составляет 10% от среднего чека.

Поверхностный вывод: Увеличиваем рекламный бюджет на посевы в телеграме в 2 раза и за счет этого наша выручка вырастет вдвое.

Реальность: Если разложить вебинарную воронку на холодных лидов (кто пришел с посевов) и теплых (наши подписчики), то мы увидим совсем другую картинку. CR2 с посевов всего 0.5%, это даже меньше бесплатного курса! То есть с первого касания люди покупают плохо - основная масса продаж происходить за счет наших подписчиков и людей, которые уже были на наших вебинарах.

Последствия: При увеличении бюджета мы уйдем в убыток почти на всю сумму рекламного бюджета.

Заключение

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

Хотите стать крутым аналитиком, который видит инсайты в цифрах, как Джон Нэш из «Игр разума»? 😁 Приходите к нам на экскурсию в Симулятор - расскажем как 👇🏻

Записаться на экскурсию: simulative.ru/excursion
👍11🔥32
Работа с плохими файлами в Pandas 🔥

Боль любого аналитика - «грязные» эксельки, которые ему приносят менеджеры. Перед тем, как прочитать этот файл Pandas-ом, аналитик тратит полдня, чтобы привести этот файл в читаемый вид и избавиться от ошибок чтения.

Однако, наверняка вы не используете фишки, которые мы описали в статье «Как справиться с хаосом: Pandas vs Excel»!

Обязательно прочитайте эту статью и возьмите себе на вооружение пару приемов - они сильно облегчат вам жизнь. Наш фаворит - использование usecols с функцией чтения!

👉 Читать статью 👈
13🔥6👍5
Приглашаем на бесплатный курс по Pandas! 🔥

Напоминаем, что недавно мы запустили бесплатный большой курс по Pandas! Если вы еще не записались на него - обязательно это сделайте!

Что вас ждет на курсе:

◾️ начнете работать с Pandas на примере реальных аналитических задач (проведете многомерный ABC-анализ, XYZ-анализ, рассчитаете динамику продаж и т.д.)

◾️ изучите все от самых азов до продвинутых функций (например, сложная агрегация, оконные функции и т.д.)

◾️ сделаете собственный проект — ваш итоговый кейс! (реальный кейс автоматизации обработки финансовой отчетности от крупной региональной аптечной сети и добавите его к себе в портфолио)

Вас ждет максимум полезного контента, куча практики и несколько больших бизнесовых проектов 😉

👉🏻 Скорее регистрируйтесь на курс: ссылка
🔥7👍4
Типичная ошибка в SQL: не использовать CASE 😱

А вы используете CASE? Иногда вы можете сократить свои запросы в несколько раз, используя его, но мы часто наблюдаем, что новички игнорируют использование этого оператора.

Вот, например, была задача — вывести поле sum со знаком -, если type=1 и со знаком +, если type=0.

Пользователь предложил такое решение:

SELECT id, sum FROM transactions t 
WHERE type = 0
UNION ALL
SELECT id, -sum FROM transactions t
WHERE type = 1


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

А вот то же самое с CASE:

SELECT id,
CASE
WHEN type = 0
THEN sum
ELSE -sum
END
FROM transactions t


Согласитесь, это намного лаконичнее и понятнее! 👍

Так более того, CASE можно использовать еще много для чего. Например, чтобы сделать из «длинной» таблицы «широкую». Или для суммирования/подсчета количества внутри агрегатных функций (да, CASE можно использовать внутри агрегатных функций!).

А еще, кстати, COALESCE, который мы обсуждали выше — это просто «синтаксический сахар» и обертка вокруг CASE. Если интересно — мы подробно это описали в статье.

Используя оператор CASE в SQL, вы можете легко выполнять различные условные операции и улучшать читаемость ваших запросов. Не игнорируйте этот мощный инструмент!
🔥22👍122
Перезапуск бесплатного курса по Pandas 🔥

Наверняка вы уже видели, что недавно мы запустили бесплатный курс по Pandas и его прошло уже более 2000 студентов!

Но мы решили его перезапустить, причем в новом формате - теперь обучение на бесплатном курсе по Pandas будет потоковым! И первый поток стартует уже завтра, 20 декабря 🔥

🔗 Записаться на курс: ссылка

Что мы обновили:

1. Теперь будет чат преподавателей и студентов, где можно задать любой вопрос по материалам
2. Мы добавили новые практические задания
3. В рамках бесплатного курса будет проходить живой закрытый мастер-класс с разбором бизнес-задачи на Pandas в формате группового созвона

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

🔗 Записаться на курс: ссылка

Если вы уже проходили курс или записывались на него - не беда, приходите еще раз, вы найдете для себя массу полезного!

А еще есть возможность вписаться в курс в VIP-тарифе, чтобы получить максимум эффективности (но бесплатное участие тоже супер классное 😁).

В общем, до встречи на курсе!

🔗 Записаться на курс: ссылка
🔥5👍4
🔥 Заготовки регулярных выражений

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

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

Мы подготовили для Вас заготовки самых часто используемых шаблонов (подробное объяснение в карточках под постом):

Email-адрес

[a-zA-Z0-9\-\._]+@[a-z0-9]+(\.[a-z0-9]+){1,}


Примеры:

✓ it_resume@abc.tech
✓ it.resume@mail.ru
✓ 2021it-resume@gmail.com

✖️ it=resume@abc.tech


Номер телефона

(\+7|8)?[\s|-]?(\d{3}[\s|-]?){2}\d{2}[\s|-]?\d{2}

Примеры:

✓ 8 9999999999
✓ +7-999-999-99-99
✓ +7 999 999-99 99
✓ 9999999999

✖️ 8(999)999 99 99

Пароль

[a-zA-z0-9@\+-]{6,16}


Примеры:

✓ IT-Resume@+
✓ itresume@@@
✓ itresume12+

✖️ ITRESUMEitresume12

Паспорт

\d{4}\s\d{6}


Примеры:

✓ 1234 567891

✖️ 123 567891
✖️ 1234 5678910

Подстрока в тексте

.*IT\sResume.*


Примеры:

✓ Мы - команда IT Resume!!!
✓ IT Resume - платформа для подготовки
к техническим собеседованиям.
✓ Становись лучше, просто решая задачи
с IT Resume :)

✖️ IT-Resume
✖️ ITresume

Начало и конец строки


^Начало строки.*Конец строки\.?$


Примеры:

✓ Самое начало строки. Какой-то текст. Самый конец строки.
✓ Самое начало строки. Самый конец строки.

✖️ Какой-то текст. Самое начало строки. Самый конец строки.
✖️ !Самое начало строки. Самый конец строки.


Эти шаблоны можно улучшать и делать более универсальными. Но даже этих будет достаточно для закрытия базовых задач. А еще и для того, чтобы разобраться в написании регулярных выражений 😉
16🔥10👍3