Правило \d в регулярных выражениях Python: анализ примеров
Быстрый ответ
Действительно, \d
в регулярных выражениях соответствует любой цифре (0-9). В Python это выглядит так:
import re
# Находим цифры
re.findall(r'\d', 'Пример123') # Результат: ['1', '2', '3']
\d
помогает найти не только латинские цифры. Он также распознаёт цифры из любых символьных систем Юникода, не только латинские.
Когда \d выходит за рамки 0-9
В Python 3 \d
не ограничивает себя диапазоном от 0 до 9 и в состоянии опознать цифровые символы из Юникода, в то числе и те, что не являются латинскими. К примеру, восточноарабские цифры (٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩) тоже будут находиться:
# \d учится понимать разные языки!
re.findall(r'\d', '١٢٣') # Возвращает ['١', '٢', '٣']
Ограничение области действия
Если вам нужны только ASCII-цифры (0-9), то используйте класс символов для их указания:
# Возвращаемся к классике
re.findall(r'[0-9]', 'Пример١٢٣123') # Возвращает ['1', '2', '3'] – всё просто!
Искусство подсчёта цифр
Чтобы найти последовательность цифр, например, три идущие подряд, используйте квантификаторы вместе с \d
:
# Цифры, вы теперь наши!
re.findall(r'\d{3}', 'Пример123456') # Возвращает ['123', '456']
Визуализация
Можете представить \d
как агента, который выискивает цифры (🕵️). Когда он отправляется в толпу символов, он находит цифровые последовательности:
Символы | Цели мистера \d |
---|---|
а б в 1 2 3 ! @ # | 🕵️ -> [1, 2, 3] |
Используя \d
, вы нацеливаетесь на цифры:
Цифры: 🕵️♂️🔍 [0️⃣, 1️⃣, 2️⃣, 3️⃣, 4️⃣, 5️⃣, 6️⃣, 7️⃣, 8️⃣, 9️⃣]
Агент \d
всегда находит цифры среди других символов:
В мире Regex 🎩:
'abc123' ➡️ 🕵️♂️💬 "Пойманы цели: 👉 1️⃣2️⃣3️⃣!"
Разъяснение путаницы с \d
Мифы в духе "\d
находит только цифры на нечётных позициях" – это городские легенды, на них полагаться не стоит. Давайте разберём их подробно:
Странные моменты с \d
Непредсказуемое поведение
\d
часто связано с особенностями текстового редактора или плагина для работы с регулярными выражениями, а не с особенностями Python или самими регулярными выражениями. Это как сравнивать покупное и домашнее печенье.Настройки подсветки синтаксиса в терминале могут создавать иллюзию, затрудняя восприятие регулярных выражений. Не позволяйте таким манипуляциям вводить вас в заблуждение!
Когда вы просите помощи, важно описать полную картину, т.е. предоставить полное регулярное выражение. Нельзя определить неисправность автомобиля, не слушая его «голоса».
Динамика: \d и метасимволы
Комбинация \d
с другими метасимволами регулярных выражений создаёт настоящую детективную загадку:
Цифра, за которой следует буквенный символ:
PythonСкопировать кодre.findall(r'\d\w', '12abc 34def') # ['2a', '4d']
Цифра в начале строки:
PythonСкопировать кодre.search(r'^\d', 'abc 123') # Результат: не найдено re.search(r'^\d', '123 abc') # Найдено: <re.Match object; span=(0, 1), match='1'>
Полезные материалы
- re — Работа с регулярными выражениями — документация Python 3.12.2.
- Как работать с регулярными выражениями — документация Python 3.12.2.
- Учебник по регулярным выражениям от Real Python.
- Python – Регулярные выражения | TutorialsPoint.
- Учебник по регулярным выражениям – Учимся на Python.
- Python RegEx – GeeksforGeeks.
- regex101: создание, тестирование и отладка регулярных выражений.