Вы можете использовать класс отрицательных символов [^_]
, который соответствует любому символу, но _
вместо .
:
^hostname\s+[^_]*_[^_]*_[^_]*$
См. Демонстрационную версию regex и Регулексный график :

См. $
в конце, который проверяет конец строки.
Такжепробел перед \s+
потребует пробел, а затем 1 или более пробелов, поэтому пробел может быть вредным, поэтому я удалил его из выражения.
Обратите внимание, вы можете сгруппировать _[^_]*
а затем установите количество повторений, которое вы можете изменить в будущем:
^hostname\s+[^_]*(?:_[^_]*){2}$
См. это регулярное выражение demo .