Python RegEx parada antes de una palabra

Tengo un poco de RegEx que estoy tratando de averiguar: ( of [A-Za-z ]+)?

La parte anterior de mi Regex coincidirá con lo siguiente:

de Nuevo México y la señora Smith.

Lo que estoy tratando de hacer es hacer que el RegEx se detenga antes and .

( of [A-Za-z ]+)\sand?

El RegEx anterior está muy cerca de resolver el problema, sin embargo, todavía coincide y.

Los partidos anteriores:

de nuevo mexico y

Quiero que salga:

de nuevo mexico

Puedes usar un token codicioso templado :

 ( of (?:(?!\band\b)[A-Za-z ])+)? ^^^^^^^^^^^^^^^^^^^^^^^^^ 

Ver la demo regex

La construcción (?:(?!\band\b)[A-Za-z ])+ coincide con los caracteres 1+ definidos en la clase de caracteres [A-Za-z ] que no son una palabra completa and .

Demo de Python :

 import re p = re.compile(r'( of (?:(?!\band\b)[A-Za-z ])+)?') s = " of New Mexico and Mrs Smith." m = p.search(s) if m: print(m.group().strip())