Я использую следующее регулярное выражение для синтаксического анализа текста и нахождения первого времени или промежутка времени:
(([0-9] | 0 [0-9] | 1 [0-9]| 2 [0-3]) (|) (- | bis) (|))? ([0-9] | 0 [0-9] | 1 [0-9] | 2 [0-3]) ((: | \.) | Uhr | Uhr)
Если у меня есть текст, содержащий "18:00 - 19:00
", ist найдет два совпадения для времени начала и окончания.
Но этопотерпит неудачу в следующем случае:
28.11.2018 - 19: 00
Первый и единственный раз в этом тексте 19:00
, но регулярное выражение "видит«18 - 19:00
в тексте и неверно интерпретирует год как первую часть промежутка времени.
Как бы вы изменили регулярное выражение, чтобы год игнорировался?
Здесьнемного больше контекста:
У меня есть календарь событий с таким количеством записей:
a) «Вечеринка в Shooters с DJ Max, сегодня в 11:00вечера. Не пропустите! "
б)" Вернисаж выставки "Буржуа", сегодня 18:00 - 20:00 в галерее Альфа. "
Для автоматического создания ежедневного расписанияиз всех событий, первое вхождение времени или промежутка времени в тексте необходимо.
Так что это ...
для а) 23:00 для б) 6:00 - 20:00
Какэтот календарь событий находится в Германии, мы записываем формат времени следующим образом.
В течение 23:00 мы можем написать ...
"23:00" или "23 Uhr" или "23:00 Uhr"
И временной интервал в Gemany может быть выражен следующим образом:
"18-20 Uhr" или "18:00 - 19:00" или 18 bis 19 Uhr "и так далее .....
Тем не менее, в случае а) одного времени будет одно совпадение с регулярным выражением, а в случае временного интервала будет два совпадения (время начала и окончания).Время совпадает, очень просто извлечь часы и минуты.
До сих пор регулярное выражение работает идеально для почти всех случаев и извлекает время и временные метки. Но в одном случае регулярное выражение дает сбой:
Если у вас есть, например, дата «18:00» (= 18:00), это время найдено.
Но иногда дате предшествует дата, у вас есть что-то вроде «11.12.2018 - 19:00"(имеется в виду 6 вечера в 2018/12/11). Сопоставитель увидит" 18 "года как время начала и 19:00 как время окончания. Таким образом, он неверно истолковывается как" 18-19: 00 "(6-19:00) вместо 19:00 (19:00).
То, что я хочу, это модификация регулярного выражения, игнорирующая "18" года 2018.