Hi If.corullon,
Just to add my two pennies, there is an interesting way of removing duplicated patterns at the beginning of paragraphs. The word ‘interesting’ does not pretend to mean ‘efficient’ but I think we may learn something from this ;-)
Disregarding the specific \d+ horas and/or \d+h\d+ patterns involved in your example, I will focus on a more generic scheme for my demonstration. Let's just target strings like [^-]+-\s, that is, “anything before a hyphen, then the hyphen, then any space character.” Our goal is to detect and remove such pattern when it is repeated at the beginning of successive paragraphs.
My first idea was to use something like ^([^-]+-\s)[^\r]+\r\K\1 , but this only selects the 2nd instance of the repeated pattern, so that wouldn't work at all for arbitrary number of dups. Now the funny trick is just a slight variation of the previous regex, /^([^-]+-\s)([^\r]+\r\K\1)+/ , which then magically selects the very last duplicate of the \1 capture!
From then we can design a recurring changeGrep() command that never needs to visit the found elements. Simply replace the captures by what you want and loop until changeGrep() returns an empty array. In the code below I use a tab ('\t') as changeTo parameter and my target is app.selection[0] since I have a TextFrame selected (of course you could use any other target, including app):
const GREP = /^([^-]+-\s)([^\r]+\r\K\1)+/;
(function(target)
{
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = GREP.source;
app.changeGrepPreferences.changeTo = '\t';
while( target.changeGrep().length );
app.findGrepPreferences = app.changeGrepPreferences = null;
})(app.selection[0]);
Here is how we can picture the iterative process (all is done in two steps):

Hope that helps,
@+
Marc