Это в некоторой степени зависит от вашего вкуса регулярных выражений, но если он поддерживает lookaround , вы можете использовать:
(\d+):(\d+)(?:\s+(?!Foo)|$)
Однако это не соответствует 12:34Bar
(между пробелами нет4 и B).
Другое редактирование: если вы можете использовать атомное нащупывание, то я думаю, что это будет охватывать случаи, когда между последней цифрой и последующим словом нет пробела, а также предыдущие случаи ( Рубулярная ссылка ):
(\d+):(?>\d+)(?!\s*F[oO][oO])
#Or just (\d+):(?>\d+)(?!\s*Foo) if case-insensitive