Сбой при разборе промежутка времени в первом году - PullRequest
0 голосов
/ 09 декабря 2018

Я использую следующее регулярное выражение для синтаксического анализа текста и нахождения первого времени или промежутка времени:

(([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.

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