Expresión regular de Python para hacer coincidir el inicio de una cadena o espacio en blanco

Tengo la siguiente cadena

'abc[123]defgh ijk[456]lm no[78] pq'

Y me gustaría extraer todas las partes que están entre el comienzo de la cadena y[ o entre espacios en blanco y[. Para la cadena dada, estas son las partes.'abc', 'ijk'y'no'.

Tengo la siguiente expresion

exp = re.compile(r'\s(.*?)\[')

Pero no puedo averiguar cómo agregar el comienzo de la cadena como una expresión opcional. ¿Cómo tengo que escribir la expresión para cubrir ambos casos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta