Следующее выражение выполнит эту работу, используя предварительное утверждение.
_(?>[^[\]]*(\[|$))
Подчеркивание представляет собой пробел. Это выражение не поддерживает вложенные скобки, потому что регулярное выражение недостаточно мощное для выражения вложенных совпадающих структур.
_ Match the space and
(?> assert that it is not inside brackets
[^[\]]* by matching all characters except brackets
( followed by either
\[ an opening bracket (a space inside brackets
will have a closing bracket at this position)
| or
$ or no more characters (end of line).
)
)
UPDATE
Вот еще одно (и более красивое) решение, использующее утверждение с отрицательным взглядом в будущее.
_(?![^[\]]*])
Он утверждает, что следующая скобка после пробела не является закрывающей скобкой.