Coincidencia exacta para las palabras

Me gustaría usar expresiones regulares que coincidan si una oración contiene una de las palabras que estoy buscando.

Todos estos son coincidentes ahora que no es correcto. Usé “” para todas las palabras en words (como " seven " ) pero esta vez no coincide si una palabra está al final de la cadena.

 words = ('seven', 'eight') regex = re.compile('|'.join(words)) print regex.search('aaaaaasd seven asdfadsf') #1 - should match print regex.search('AAAsevenAAA') #2 - shouldn't match print regex.search('AAA eightaaa') #3 - shouldn't match print regex.search('eight aaa') #4 - should match print regex.search('aaaa eight') #5 - should match 

¿Cómo puedo hacer que mi expresión regular no coincida si la palabra coincidente es una de las subcadenas de palabras (como # 2 y # 3 arriba)?

Como @CasimiretHippolyte señaló que desea agregar límites de palabras . Si no desea hacer esto manualmente para cada palabra en su lista, necesita modificar su expresión regular comstackda.

 regex = re.compile(r'\b(?:%s)\b' % '|'.join(words)) 

Nota: si tiene secuencias de escape en su expresión regular, es mejor usar la notación de cadena en bruto. Al usar un grupo que no captura (?:...) , esto permite que sus palabras se agrupen con los límites de palabras colocados alrededor de ellos, de lo contrario, coloca un límite al principio y al final.

Demo de Ideone