Regex coincide con la primera y la última palabra o cualquier palabra

Tengo un archivo enorme con una lista de datos como este:

#fabulous 7.526 2301 2 #excellent 7.247 2612 3 #superb 7.199 1660 2 #perfection 7.099 3004 4 #terrific 6.922 629 1 

Tengo un archivo que contiene una lista de oraciones como esta:

 Terrific Theo Walcott is still shit, watch Rafa and Johnny deal with him on Saturday. its not that I'm a GSP fan, fabulous Iranian general says Israel's Iron Dome can't deal with their missiles with J Davlar 11th. Main rivals are team Poland. 

Quiero verificar con regex lo siguiente:

  1. si la primera palabra de cada oración coincide con cualquier palabra del ejemplo de archivo, si Terrific, its, Iranian, aparece en el archivo o no

  2. si la última palabra en la oración coincide con cualquier palabra en el archivo Ejemplo, si sábado, fabuloso, misiles, Polonia aparece o no en el archivo

  3. si el prefijo de 2 o 3 caracteres y el sufijo de las palabras individuales en las oraciones coincide con el prefijo de 2 o 3 caracteres y el sufijo en el ejemplo de archivo si Ter, its, Ira, wi coincide con cualquier prefijo de 2 o 3 palabras del archivo o no. Lo mismo se aplica al sufijo.

Soy tan nuevo en las expresiones regulares que podría pensar de esta manera pero no obtengo el resultado: term2.lower () es la primera columna del archivo

  wordanalysis["trail"] = found if re.match(sentence[-1],term2.lower()) else not(found) wordanalysis["lead"] = found if re.match(sentence[0],term2.lower()) else not(found) 

Actualización: Según la sugerencia impresionante de @justhalf, no es necesario usar expresiones regulares para dividir las palabras. Elimine .lower() si desea una coincidencia sensible a mayúsculas y minúsculas.

Esto coincidirá con la primera palabra y las últimas palabras (excluyendo cualquier puntuación o espacios en blanco al final) en su lista de datos:

(^\s?\w+\b|(\b\w+)[\.?!\s]*$)

Partidos:

 MATCH 1-1. Terrific MATCH 2-1. Saturday. 2. Saturday MATCH 3-1. its MATCH 4-1. fabulous 2. fabulous MATCH 5-1. Iranian MATCH 6-1. missiles 2. missiles MATCH 7-1. with MATCH 8-1. Poland. 2. Poland 

Implementación:

 import re, string sentences = open("sentences.txt").read().splitlines() data = open("data.txt").read() pattern = re.compile(r"(^\s?\w+\b|(\b\w+)[\.?!\s]*$)") for line in sentences: words = line.strip().split() first = words[0].lower() last = words[-1].translate(None, string.punctuation).lower() if (re.search(first, data, re.I)): print "Found " + first + " in data.txt" if (re.search(last, data, re.I)): print "Found " + last + " in data.txt" 

Probablemente esta no sea la forma más elegante de hacerlo, pero entiendes la idea.

El código está probado y funciona, la salida es:

 Found Terrific in data.txt Found fabulous in data.txt 

Además, esto no cumple con su tercer criterio, pruebe esto y vea si está funcionando tan bien para usted.