Мне нужно перенести очень большой набор данных из одной системы в другую. Один из столбцов «источник» содержит дату, но на самом деле это строка без ограничений, в то время как система назначения назначает дату в формате гггг-мм-дд.
Многие, но не все исходные даты форматируются как ггггммдд. Чтобы привести их к ожидаемому формату, я делаю (в Perl):
return "$1-$2-$3" if ($val =~ /(\d{4})[-\/]*(\d{2})[-\/]*(\d{2})/);
Проблема возникает, когда исходные даты удаляются от «общего» ггггммдд. Цель состоит в том, чтобы спасти как можно больше дат, прежде чем сдаться. Примеры исходных строк:
21/3/1998,
Март 2004 года,
2001,
3/4/97 & times; 1008 *
Я могу попытаться сопоставить как можно больше примеров, которые я могу найти, с последовательностью регулярных выражений, таких как приведенное выше.
Но есть ли что-нибудь умнее, чтобы сделать? Разве я не изобретаю велосипед? Есть ли где-нибудь библиотека, которая делает что-то подобное? Я не смог найти ничего подходящего, прибегая к помощи "прощающего парсера дат". (любой язык в порядке).