Правило \d в регулярных выражениях Python: анализ примеров

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Действительно, \d в регулярных выражениях соответствует любой цифре (0-9). В Python это выглядит так:

Python
Скопировать код
import re

# Находим цифры
re.findall(r'\d', 'Пример123')  # Результат: ['1', '2', '3']

\d помогает найти не только латинские цифры. Он также распознаёт цифры из любых символьных систем Юникода, не только латинские.

Кинга Идем в IT: пошаговый план для смены профессии

Когда \d выходит за рамки 0-9

В Python 3 \d не ограничивает себя диапазоном от 0 до 9 и в состоянии опознать цифровые символы из Юникода, в то числе и те, что не являются латинскими. К примеру, восточноарабские цифры (٠‎ ١‎ ٢‎ ٣‎ ٤‎ ٥‎ ٦‎ ٧‎ ٨‎ ٩) тоже будут находиться:

Python
Скопировать код
# \d учится понимать разные языки!
re.findall(r'\d', '١٢٣')  # Возвращает ['١', '٢', '٣']

Ограничение области действия

Если вам нужны только ASCII-цифры (0-9), то используйте класс символов для их указания:

Python
Скопировать код
# Возвращаемся к классике
re.findall(r'[0-9]', 'Пример١٢٣123')  # Возвращает ['1', '2', '3'] – всё просто!

Искусство подсчёта цифр

Чтобы найти последовательность цифр, например, три идущие подряд, используйте квантификаторы вместе с \d:

Python
Скопировать код
# Цифры, вы теперь наши!
re.findall(r'\d{3}', 'Пример123456')  # Возвращает ['123', '456']

Визуализация

Можете представить \d как агента, который выискивает цифры (🕵️). Когда он отправляется в толпу символов, он находит цифровые последовательности:

СимволыЦели мистера \d
а б в 1 2 3 ! @ #🕵️ -> [1, 2, 3]

Используя \d, вы нацеливаетесь на цифры:

Markdown
Скопировать код
Цифры: 🕵️‍♂️🔍 [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'>

Полезные материалы

  1. re — Работа с регулярными выражениями — документация Python 3.12.2.
  2. Как работать с регулярными выражениями — документация Python 3.12.2.
  3. Учебник по регулярным выражениям от Real Python.
  4. Python – Регулярные выражения | TutorialsPoint.
  5. Учебник по регулярным выражениям – Учимся на Python.
  6. Python RegEx – GeeksforGeeks.
  7. regex101: создание, тестирование и отладка регулярных выражений.