У меня есть данные для задач, которые были записаны с помощью приложения с расписанием. Я пытаюсь разобрать перерывы для каждой задачи.Группировка временных меток с описаниями
Строка Пример перерыва привязанных к задаче может выглядеть следующим образом:
1:19 PM - 10:33 вечера ели тако 10:35 PM - 11:38 вечера 12:40 AM - 1:24 утра принял дремоту
Мне нужно сгруппировать это во временные марки со связанными описаниями. Выше, должны быть сгруппированы как:
1:19 вечера - 10:33 вечера ели тако
10:35 вечера - 11:38 вечера
12:40 AM - 1:24 утра поспал
Описание интервала прерывания может содержать в основном любые символы или быть любой длиной. В некоторых интервалах нет описаний.
Я считаю, что регулярное выражение будет самым простым способом получить массив интервалов с их описаниями (если они есть).
До сих пор у меня есть:
\d{1,2}:\d{2}[ap]m\s–\s\d{1,2}:\d{2}[ap]m
, который соответствует метки времени 1:19pm – 10:33pm
, 10:35pm – 11:38pm
и 12:40am – 1:24am
Я использую JavaScript, а также функцию match, чтобы разобрать эти данные. Я хочу сделать регулярное выражение, которое будет соответствовать отметке времени и всему, что следует за ней, до следующей отметки времени.
Я новичок с регулярным выражением, поэтому легко на меня. Я был в этом часами, смотрел несколько видеороликов, читал учебники и экспериментировал с regex101. Якоря, взгляды/затылки, сбивают с толку, и я не могу заставить ничего делать, что хочу. Не желая стать экспертом в написании регулярных выражений, но мне бы очень хотелось узнать что-то новое, которое можно применить непосредственно к тому, что я делаю.
Я думал, что вы заинтересованы в организации вывода в какой-то более читаемой форме, поэтому я предложил две группы захвата. Обратите внимание, что в другом рабочем решении используется конструкция, которая может привести к катастрофическому обратному отскоку, если ваш вход большой. Регуляции Unroll-the-loop не подвержены этой проблеме. –
Вы в этой теме, какой отличный ответ. – jgoodhcg
Обратите внимание, что если шаблон регулярного выражения известен заранее, метод * * unroll-the-loop * (или * Unrolled Star Alternation Solution *)] (http://www.rexegg.com/regex-quantifiers.html#unrolled_staralt) является наиболее подходящим для соответствия самому близкому появлению подшаблона. Если вы используете переменную, вы должны использовать [* tempered greedy token *] (http://www.rexegg.com/regex-quantifiers.html#tempered_greed) или нережимное решение, если оно неэффективно достаточно. –