В чем разница между функциями `re.search()` и `re.match()` в Python?

Ответ

Функции re.search() и re.match() из модуля re в Python используются для поиска совпадений с регулярными выражениями, но их ключевое отличие заключается в области поиска:

  • re.match(pattern, string): Ищет совпадение только в начале строки. Если шаблон не совпадает с началом строки, функция немедленно возвращает None.
    • Применение: Идеально подходит для проверки, начинается ли строка с определенного шаблона, например, для валидации формата префикса.
  • re.search(pattern, string): Ищет первое совпадение с шаблоном по всей строке. Сканирует строку слева направо и возвращает первое найденное совпадение.
    • Применение: Используется для поиска подстроки, соответствующей шаблону, в любом месте строки.

Пример:

import re

text = "Python is awesome"

# re.match() ищет только в начале
match_is = re.match(r"is", text)
print(f"re.match('is', text): {match_is}") # None, так как 'is' не в начале

match_python = re.match(r"Python", text)
print(f"re.match('Python', text): {match_python}") # <re.Match object; span=(0, 6), match='Python'>

# re.search() ищет по всей строке
search_is = re.search(r"is", text)
print(f"re.search('is', text): {search_is}") # <re.Match object; span=(7, 9), match='is'>

search_awesome = re.search(r"awesome", text)
print(f"re.search('awesome', text): {search_awesome}") # <re.Match object; span=(10, 17), match='awesome'>

Когда использовать:

  • Используйте re.match(), когда вам нужно убедиться, что строка начинается с определенного шаблона.
  • Используйте re.search(), когда вам нужно найти первое вхождение шаблона в любом месте строки.