Во-первых, это то, что не так с вашими регулярными выражениями:
\d+?(:)
- находит номер и столбец (14:
) и помещает столбец в группу (\d+:)
- находит номер и столбец (14:
) и помещает все их в группу (\d+)*:
- находит (необязательно из-за *
) номер и столбец (14:
) и помещаетчисло в группу
Итак, последний может сработать:
>>> match = re.search(r'(\d+)*:', "10/25/2019 14:30")
>>> match.group(0) # whole result
'14:'
>>> match.group(1) # just the number
'14'
Но опять же, он даст неверный результат (вместо разбития) на что-то вроде «времени»: 14:30 ", затрудняя отладку ошибки позже.Вам нужно использовать более строгий поиск, например, сопоставить всю строку и пометить все группы:
>>> regex = r'(?P<month>\d\d)/(?P<day>\d\d)/(?P<year>\d{4}) (?P<hour>\d\d):(?P<minute>\d\d)'
>>> re.search(regex, "10/25/2019 14:30").group('hour')
'14'
Другой, более простой и еще более безопасный способ - использовать strptime:
>>> import datetime
>>> datetime.datetime.strptime("10/25/2019 14:30", "%m/%d/%Y %H:%M")
datetime.datetime(2019, 10, 25, 14, 30)
Теперь у вас есть полный объект datetime, и вы можете извлечь .hour
, если хотите.