Regex в Java для извлечения даты и времени - PullRequest
0 голосов
/ 04 мая 2018

Ниже приведены мои примеры даты и времени в каждой строке

March 9 12:31 AM and March 10 7:30 AM
March 11 7:30 AM and March 12 10:30 AM
March 31 9:00 PM and April 1 12:39 AM
March 31 10:11 PM and April 1 5:23 AM
7:45 PM and 10:30 PM

Моя строка содержит даты следующего типа. Необходимо извлечь две даты времени из каждой строки.

Например: из строки 1 нужно извлечь время даты, например:

March 9 12:31 AM
March 10 7:30 AM

Должен применяться для всех названий месяцев. Я не хочу проверять 30 или 31 день в каждом месяце.

Это мое текущее регулярное выражение. Это некоторое время относится к часу как к дате

(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)|(\\s)[\\d]{1,2}(?!:)|(\\s)(1[012]|[1-9]):[0-5][0-9](\\s)(?i)(am|pm)+

Может ли кто-нибудь помочь мне решить эту проблему

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Спасибо @Andreas за ваше объяснение, вы имеете право, поэтому мне нужно изменить свое регулярное выражение на:

((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?) ([1-9]|[12]\d|3[01]) )?(\b([1-9]|1[012]):[0-5]\d (?i)(am|pm))

Я использую \ b, чтобы не ловить часы вроде 27:45 PM, где без \ b он ловит 7:45 PM (misssing 2)

Демо

Первая версия была (не такая хорошая):

((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)(\s)([1,2][\d]|[1-9]|30|31)(\s))?(\b[\d]|10|11|12):[0-5][0-9]\s(AM|PM)

чтобы не подтверждать такие даты:

March 31 10:71 PM and April 1 5:23 AM
27:45 PM and 10:80 PM
May 3 4:41 PM PDT and May 41 12:19 AM PDT
0 голосов
/ 05 мая 2018

Regex:

(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\s[\d]{1,2}\s)?(?:1[012]|[1-9]):[0-5][0-9]\s(?:am|pm)

Демо

Объяснение

(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\s[\d]{1,2}\s)? соответствует сочетанию 0 или 1 месяц и дата

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