Извлечение подстрок

Необходимо извлечь определённые части строки. Пример:

"Суббота" => "Суббота"
"Суббота02окт" => "Суббота", "02", "окт"
"Суббота02окт." => "Суббота", "02", "окт"

Если в конце строки есть точка, то она должна быть проигнорирована. Пробовал реализовать это так:

pattern = re.compile(r'([А-Я][А-Яа-я]+)([0-9]+)([А-Я][А-Яа-я]+)')
date_result = re.findall(pattern, date)

Но получаю пустой массив, что я делаю не так?


Ответы (2 шт):

Автор решения: Michael Tetelev

Проблема в том, что вы ищете целый паттерн слово-цифры-слово, а нужно слово ИЛИ цифры. Для этого используйте знак |:

import re
dates = ["Суббота", "Суббота02окт", "Суббота02окт."]
pattern = re.compile(r'[0-9]+|[А-ЯЁа-яё]+')
for date in dates:
    print(re.findall(pattern, date))
# ['Суббота']
# ['Суббота', '02', 'окт']
# ['Суббота', '02', 'окт']
→ Ссылка
Автор решения: Эникейщик

Не так: обязательное наличие трёх частей и обязательные заглавные буквы в третьей части.

pattern = re.compile(r'([А-Я][А-Яа-я]+)([0-9]+)*([А-Яа-я]+)*')
→ Ссылка