🐛 Типичные ошибки

⚡ Топ-3 ошибки

  1. Забыть r перед строкой шаблона.
  2. Путать re.match и re.search.
  3. Использовать жадный квантификатор, когда нужен ленивый.

❌ Ошибка 1. Забыть raw string

# Неправильно
import re
print(re.findall("\d+", "Age: 25"))  # []

Почему: без r строка "\d" превращается в "d".

✅ Исправление

print(re.findall(r"\d+", "Age: 25"))  # ['25']

❌ Ошибка 2. re.match вместо re.search

# Неправильно
import re

# Хотим найти ID в любом месте строки
print(re.match(r"ID\d+", "User: ID123"))  # None

Почему: re.match проверяет только начало строки.

✅ Исправление

print(re.search(r"ID\d+", "User: ID123").group())  # ID123

❌ Ошибка 3. Жадный квантификатор

# Неправильно
import re
text = "<div>Hello</div>"
print(re.findall(r"<.*>", text))  # ['<div>Hello</div>']

Почему: .* старается захватить максимум символов.

✅ Исправление

print(re.findall(r"<.*?>", text))  # ['<div>', '</div>']

❌ Ошибка 4. Неэкранированная точка

# Неправильно
import re
print(re.findall(r"report.txt", "reportXtxt report.txt"))
# ['reportXtxt', 'report.txt'] — точка совпала с X

Почему: точка . в regex означает «любой символ».

✅ Исправление

print(re.findall(r"report\.txt", "reportXtxt report.txt"))  # ['report.txt']

❌ Ошибка 5. Regex там, где достаточно строк

# Неправильно
import re
if re.search(r"error", log_line):
    ...

Почему: лишняя сложность и медленнее, чем встроенные методы.

✅ Исправление

if "error" in log_line:
    ...