Это решение просто должно поддерживать прогнозное утверждение.
(?s)(?=[^:]*\d[^:]*:)(([0-9]{1,2}h)?[ ]*([0-9]{1,2}min)?:\s*)((?:.(?!(\dh\s\d{1,2}min|\dh|\d{1,2}min)))+)
https://regex101.com/r/gz4r9g/1
Расширенное
(?s)
(?= [^:]* \d [^:]* : )
( # (1 start)
( [0-9]{1,2} h )? # (2)
[ ]*
( [0-9]{1,2} min )? # (3)
: \s*
) # (1 end)
( # (4 start)
(?:
.
(?!
( # (5 start)
\d h \s \d{1,2} min
| \d h
| \d{1,2} min
) # (5 end)
)
)+
) # (4 end)
Это решение просто должно поддерживать сброс ветви.
(?s)(?|([0-9]{1,2}h)[ ]*([0-9]{1,2}min)|([0-9]{1,2}h)()|()([0-9]{1,2}min)):\s*((?:.(?!(\dh\s\d{1,2}min|\dh|\d{1,2}min)))+)
https://regex101.com/r/pyACdi/1
Расширен
(?s)
(?|
( [0-9]{1,2} h ) # (1)
[ ]*
( [0-9]{1,2} min ) # (2)
| ( [0-9]{1,2} h ) # (1)
( ) # (2)
| ( ) # (1)
( [0-9]{1,2} min ) # (2)
)
: \s*
( # (3 start)
(?:
.
(?!
( # (4 start)
\d h \s \d{1,2} min
| \d h
| \d{1,2} min
) # (4 end)
)
)+
) # (3 end)