Извлечение подстрок
Необходимо извлечь определённые части строки. Пример:
"Суббота" => "Суббота"
"Суббота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]+)*([А-Яа-я]+)*')