Поиск даты в тексте

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Поиск даты в тексте

Сообщение neoksi » 23 фев 2013, 07:05

Приветствую!

Пытаюсь решить следующую задачку, пока в уме:
Есть 12 основных форматов записи даты, необходимо найти и выцепить дату из текста.
Пока придумал создать 12 Pattern на каждый формат даты и по очереди прогонять через них текст, а потом проверять правильность полученных дат.
Может есть более оптимальный путь?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Поиск даты в тексте

Сообщение neoksi » 23 фев 2013, 07:36

Форматы записи дат:

Код: Выделить всё

dd.MM.yyyy
M/d/yyyy
yyyy. MM. dd
yyyy-MM-dd
yyyy/MM/dd
yyyy-M-d
yyyy/M/d
d.M.yyyy
d-M-yyyy
d/M/yyyy
dd-MM-yyyy
dd/MM/yyyy
Нашел следующее регулярное выражение:

Код: Выделить всё

(((0[1-9]|[12]\d|3[01])\.(0[13578]|1[02])\.((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\.(0[13456789]|1[012])\.((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\.02\.((19|[2-9]\d)\d{2}))|(29\.02\.((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))
Оно предназначено для 1го формата записи даты, помогите преобразовать его для остальных 11.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Поиск даты в тексте

Сообщение neoksi » 28 фев 2013, 17:47

В общем для поиска в тексте первого формата даты, у меня вышел следующий паттерн:

Код: Выделить всё

            // (1) Паттерн для проверки даты формата dd.MM.yyyy
	    public static final Pattern DF_ru
	    = Pattern.compile(	        
	        "(" +
	        "((0[1-9]|[12]\\d|3[01])\\.(0[13578]|1[02])\\.((19|[2-9]\\d)\\d{2}))" +
	        "|" +
	        "((0[1-9]|[12]\\d|30)\\.(0[13456789]|1[012])\\.((19|[2-9]\\d)\\d{2}))" +
	        "|" +
	        "((0[1-9]|1\\d|2[0-8])\\.02\\.((19|[2-9]\\d)\\d{2}))" +
	        "|" +
	        "(29\\.02\\.((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))" +
	        ")"
	    );
Для остальных форматов делается по аналогии.

Ответить