Было бы неплохо, если бы у вас был пример текста того, что вы делаете, а вы не хотите, чтобы он совпадал.
Я просто собираюсь использовать текст вашего вопроса, поскольку больше ничего не нужно использовать.
\b(?<![012\s][0-9]:[0-5][0-9]-)(?<![012\s][0-9]:[0-5][0-9] - )(?:[01]?[0-9]|2[0-3]|24(?=:00)):[0-5][0-9]\b(?!\s*-\s*[012]?[0-9]:[0-5][0-9]\b)
Пояснение (см. Также regex101 demo & объяснение ):
\b
- это граница слова (нулевая ширина, ровно одна сторона должна соответствовать \w
для символа слова) (?<!…)
отрицательный отстающий (шаблон фиксированной ширины, который должен не предшествовать текущему местоположению) -
[012\s]
ноль, один, два или пробел [0-9]:[0-5][0-9]
ди git, двоеточие, ди git между 0-5 включительно и еще один ди git -
да sh
(?<!…)
еще один негативный взгляд (с другой шириной) [012\s]
ноль, один, два или пробел [0-9]:[0-5][0-9]
ди git, двоеточие, ди git между 0-5 включительно и еще один ди git -
пробел, да sh и еще один пробел
(?:…|…|…)
группировка без захвата, поэтому у нас могут быть изменения (соответствуют любым из этих трех): [01]?[0-9]
чередование 1: необязательный ведущий 0 или 1, затем ди git 2[0-3]
чередование 2: два и затем ди git между 0 и 3 24(?=:00)
чередование 3: 24, которое должно предшествовать :00
(положительный прогноз) )
:[0-5][0-9]\b
двоеточие, ди git от 0-5, еще один ди git и граница слова (?!…)
негативный вид - впереди (текст этой точки должен , а не соответствовать этому прогнозу) \s*-\s*
любое расстояние, да sh, любое расстояние [012]?[0-9]:[0-5][0-9]\b
a 0, 1 или 2, затем любой ди git, двоеточие и т. д. c.
Я немного сократил свои взгляды. Они будут соответствовать 25:50
например. Фактическое совпадение является более точным c и будет совпадать только с 00:00 до 24:00.