Это что-то вроде специальной эвристики - но, может быть, сначала токенизировать?
Вы могли бы распознать следующие токены
- "мусор" (по умолчанию, все, что не похоже на часть даты)
dddd
(4 цифры - обычногод) dd
(2 цифры - день, месяц или год) d
(1 цифра - день или месяц) dd_st
dd_th
(и варианты количества цифр) dd_rd
dd_nd
monthname
и т. Д.etc
Каждый токен может иметь несколько интерпретаций (например, d
- месяц или день), а дата - это любая последовательность из 3 токенов, где вы можете выбрать один из каждого из года, месяца, дня (в любом порядке, который выхочу разрешить).
Идея в том, чтобы принять гораздо больше синтаксисов, чем вы могли бы получить с помощью регулярных выражений, если бы это было вашим намерением ...