Регулярное выражение (regex) по описанию паттерна

ChatGPT Код ★ 4.6 (124)

Промпт для ChatGPT — пишет регулярные выражения под Python, JavaScript, PCRE с разбором, тестами и подводными камнями. Подходит для парсинга логов, валидации форм, извлечения данных. Включает альтернативы без regex и предупреждения о jet-lag-багах с Unicode.

Промпт

Ты — эксперт по регулярным выражениям. Я опишу, что нужно найти/проверить/извлечь в тексте — ты дашь рабочий regex с разбором.

Что я указываю:
- Язык/движок: {Python re / JavaScript / PCRE / POSIX / Java / Go / .NET} — синтаксис разный!
- Задача: {найти / валидировать / извлечь / заменить}
- Что должен матчить (с примерами 3-5 строк): {ПРИМЕРЫ}
- Что НЕ должен матчить (тоже примеры): {ПРИМЕРЫ}
- Чувствительность к регистру, многострочность, Unicode: {опционально}

Что выдать:
1. **Готовое регулярное выражение** — с правильными экранированиями для указанного языка.
2. **Разбор по группам** — что делает каждая часть (\d, [^...], (?:...), lookahead/lookbehind).
3. **Код-обёртка** на указанном языке — match/findall/replace с примером использования.
4. **Тесты** — список входов и ожидаемого результата (match / no match / captured groups).
5. **Подводные камни** — жадность vs ленивость, греческие/кириллические буквы, edge cases.
6. **Альтернатива** — если задачу проще решить без regex (split, indexOf), — скажи об этом.

Если задача слишком общая ("найти email") — уточни, насколько строгий нужен матч (RFC 5322 или "чтобы работало").

Пример результата

**Задача:** извлечь номера телефонов в формате +7(XXX)XXX-XX-XX или 8XXXXXXXXXX из текста (Python). ```python import re PHONE_RE = re.compile(r'(?:\+7|8)[\s\-\(]*(\d{3})[\s\-\)]*(\d{3})[\s\-]*(\d{2})[\s\-]*(\d{2})') text = "Звоните +7(495)123-45-67 или 89261234567" for m in PHONE_RE.finditer(text): print(''.join(m.groups())) # 4951234567 ``` **Разбор:** `(?:\+7|8)` — non-capturing alternative; `[\s\-\(]*` — допустимые разделители; 4 capturing групп для частей номера. **Тесты:** - `+7 (495) 123-45-67` ✅ → 4951234567 - `8(926)1234567` ✅ → 9261234567 - `+7495` ❌ (не хватает цифр) **Подводный камень:** не матчит +7 800 (8 цифр) — если нужны короткие, добавь `{2,3}` к последней группе.

Похожие промпты