Почему некоторые функции регулярных выражений возвращают объект соответствия, а некоторые нет?

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

re.search(шаблон, строка): ищет первое вхождение шаблона в строке и возвращает объект соответствия.

match = re.search(r'\d+', 'There are 123 apples')
if match:
    print(match.group())  # Output: '123'

Но результаты для функций регулярных выражений, таких как re.findall, re.split, re.sub и т. д., можно распечатать напрямую:

re.split(шаблон, строка): разбивает строку по вхождениям шаблона и возвращает список.

result = re.split(r'\s+', 'Split this string by spaces')
print(result)  # Output: ['Split', 'this', 'string', 'by', 'spaces']

🤔 А знаете ли вы, что...
С Python можно создавать роботов и автоматизированные системы с использованием библиотеки Raspberry Pi.


63
1

Ответ:

Решено

Эти группы функций просто имеют разные цели. Такие, как re.match, re.search, re.fullmatch, просто сообщают вам, есть ли совпадение в тексте и где оно находится:

re.search(r'\d+', 'There are 123 apples')

результат: <re.Match объект; диапазон=(10, 13), совпадение='123'>

re.match(r'There', 'There are 123 apples')

результат: <re.Match объект; span=(0, 5), match='Там'>

Таким образом, вы используете эти функции, когда хотите найти первое место в строке, где можно найти шаблон, или просто для проверки наличия шаблона в вашей строке. Обычно вы не хотите распечатывать шаблон или использовать его в качестве переменной.

Хотя цель re.split, re.findall и т. д. — предоставить вам список строк. который нужно либо распечатать, либо использовать дальше в скрипте.

re.split(r'\s+', 'Split this string by spaces')

['Разделить', 'это', 'строка', 'по', 'пробелы']

re.findall("o[a-z]", 'Find groups of o+ other letters')

['оу', 'из', 'от']

Надеюсь, это прояснит ситуацию.


Интересные вопросы для изучения