I dati per le attività sono state registrate con un'app time sheet. Sto cercando di analizzare le interruzioni per ogni attività.Timestamp di raggruppamento con descrizioni
Una stringa esempio pausa attaccato ad un compito può apparire come segue:
13:19-22:33 mangiato tacos 22:35-23:38 00:40-01:24 ha preso un pisolino
Ho bisogno di raggruppare questo in timestamp con le loro descrizioni associate. Quanto sopra dovrebbe essere raggruppati come:
13:19-22:33 tacos mangiato
22:35-23:38
00:40-01:24 ha preso un pisolino
La descrizione per un intervallo di interruzione può avere praticamente qualsiasi carattere o essere di qualsiasi lunghezza. Alcuni intervalli non hanno descrizioni.
I figura regex sarebbe il modo più semplice per ottenere una serie di intervalli con le loro descrizioni (se ne hanno uno).
Finora ho:
\d{1,2}:\d{2}[ap]m\s–\s\d{1,2}:\d{2}[ap]m
che corrisponde ai timestamp 1:19pm – 10:33pm
, 10:35pm – 11:38pm
, e 12:40am – 1:24am
Sto usando JavaScript, e la funzione match, per analizzare questi dati. Voglio fare un'espressione regolare che corrisponda al timestamp e tutto ciò che lo segue fino al prossimo timestamp.
Sono un principiante con regex quindi andate piano con me. Sono stato a questo per ore, guardato diversi video, leggere blog tutorial, e ho sperimentato con regex101. Le ancore, lookahead/behinds, sono confuse e non riesco a ottenere nulla per fare ciò che voglio. Non sto cercando di diventare un esperto nella scrittura di espressioni regolari, ma mi piacerebbe davvero imparare qualcosa di nuovo che possa essere applicato direttamente a ciò che sto facendo.
Pensavo che fossi interessato a organizzare l'output in una forma più leggibile, quindi ho suggerito due gruppi di cattura. Nota che l'altra soluzione funzionante sta usando un costrutto che può portare a un backtrack catastrofico se il tuo input è ampio. Le espressioni regolari Srotolare il ciclo non sono così soggette a questo problema. –
Hai finito questa discussione, che bella risposta. – jgoodhcg
Si noti che nel caso in cui il modello regex sia noto in anticipo, la tecnica [* srotolare-il-ciclo * (o * Alternated Star Alternation Solution *)] (http://www.rexegg.com/regex-quantifiers.html#unrolled_staralt) è il più appropriato per corrispondere fino all'occorrenza più vicina di un subpattern. Nel caso si utilizzi una variabile, è necessario utilizzare un [* token greedy temperato *] (http://www.rexegg.com/regex-quantifiers.html#tempered_greed) o una soluzione non regex se non è efficiente abbastanza. –