В обычных функциях регулярных выражений 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']
Почему все функции должны иметь один и тот же тип возвращаемого значения, если они служат разным целям?
Эти группы функций просто имеют разные цели. Такие, как 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')
['оу', 'из', 'от']
Надеюсь, это прояснит ситуацию.
Спасибо .. помогает понять .. Будучи учеником, мой вопрос заключался только в том, чтобы понять, есть ли какая-либо техническая причина, по которой некоторые функции возвращают объект соответствия. Но теперь я понимаю, что они были построены именно так. Еще раз спасибо за помощь и понимание
Спрашивайте у разработчика модуля, а не у SO.