Я думаю, что самой простой вещью было бы написать несколько шаблонов.
(Предполагая, что вы просто ищете эти два шаблона - очевидно, вам будет сложнее сделать это самостоятельно, если вы ищете каждый возможный формат даты)
import re
date_string = "some text contains 2-Nov-2018 and 3-11-2018"
formats = [r'\d{1,2}[/-]\D{1,8}[/-]\d{2,4}', # List of patterns
r'\d{1,2}[/-]\d{1,2}[/-]\d{2,4}']
dates = re.findall('|'.join(formats), date_string) # Join with | operator
dates
# ['2-Nov-2018', '3-11-2018']
Чтобы стандартизировать даты после этого, вы можете попробовать что-то вроде pandas.to_datetime
:
import pandas as pd
dates = ['2-Nov-2018', '3-11-2018']
std_dates = [pd.to_datetime(d) for d in dates]
std_dates
# [Timestamp('2018-11-02 00:00:00'), Timestamp('2018-03-11 00:00:00')]
Как упоминалось внекоторые комментарии, могут быть библиотеки, уже созданные, чтобы сделать все это для васПоэтому, если вы ищете более общий подход, я бы взглянул на эти библиотеки.