Python-Regex, um den Beginn der Zeichenfolge oder des Leerzeichens abzugleichen

Ich habe die folgende Zeichenfolge

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

Und ich möchte alle Teile extrahieren, die sich entweder zwischen dem Anfang der Zeichenfolge und befinden[ oder zwischen Leerzeichen und[. Für die angegebene Zeichenfolge sind dies die Teile'abc', 'ijk', und'no'.

Ich habe den folgenden Ausdruck

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

Aber ich kann nicht herausfinden, wie man den Anfang der Zeichenkette als optionalen Ausdruck hinzufügt. Wie muss ich den Ausdruck schreiben, um beide Fälle abzudecken?