Как извлечь время из строки с помощью регулярных выражений? - PullRequest
1 голос
/ 04 марта 2011

Проблема в том, что время отображается в разных формах, например

19:03 
3:29 pm
3:29 PM

Как с этим справиться?спасибо

Ответы [ 4 ]

7 голосов
/ 04 марта 2011

Я бы порекомендовал использовать что-то вроде SimpleDateFormat для этой проблемы.

То, что вы могли бы сделать, это определить свой набор форматов даты, а затем проанализировать их в цикле, пока один из форматов не будет выполнен успешно (т.е. не выдает исключение). Что-то вроде следующего фрагмента:

for(SimpleDateFormat fmt : formats) {
    try { 
        return fmt.parse(date, startpos);
    } catch(Exception e) {}
}

Естественно, это предполагает, что вы создали список шаблонов разных форматов. Как правило, joda-time также является хорошим дополнением ко времени Java.

2 голосов
/ 04 марта 2011

Если вы не напишите регулярное выражение для каждого возможного формата времени и OR их вместе, вы просто не сможете сделать это с регулярным выражением.

Что я имею в виду, начиная с

(rgx1|rgx2|rgx3)

где rgxX - действительное регулярное выражение времени. В вашем примере вы можете попробовать

([\d]{1,2}:[\d]{1,2}|[\d]{1,2}:[\d]{1,2} [aApP][mM])

Но это регулярное выражение также будет соответствовать 45:89 PM, что не является допустимым временем

Если вам нужно извлечь время, это полезно, в то время как если вам нужно проверить , вы не можете с помощью регулярного выражения

1 голос
/ 04 марта 2011

Я бы рекомендовал использовать Joda's DateTimeFormat .В отличие от SimpleDateFormat, он гарантированно безопасен для потоков.

0 голосов
/ 04 марта 2011

DateUtils.parseDate(dateString, patterns[]) из Apache Commons / Lang позволяет указать несколько шаблонов, которые будут проверяться по очереди.Возможно, это вариант, если вы можете определить все возможные форматы данных, которые будут иметь место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...