Expresión regular de Python para buscar palabras en una oración

Todavía estoy aprendiendo las cuerdas con expresiones regulares de Python y necesito ayuda, ¡por favor! Necesito una expresión regular que pueda buscar palabras específicas en una oración. He logrado crear un patrón para buscar una sola palabra, pero ¿cómo puedo recuperar las otras palabras que necesito encontrar? ¿Cómo se vería el nuevo patrón para hacer esto?

>>> question = "the total number of staff in 30?" >>> re_pattern = r'\btotal.*?\b' >>> m = re.findall(re_pattern, question) ['total'] 

Debe buscar las palabras “total” y “personal” Gracias Mike

Utilice el operador sindical | para buscar todas las palabras que necesitas encontrar:

 In [20]: re_pattern = r'\b(?:total|staff)\b' In [21]: re.findall(re_pattern, question) Out[21]: ['total', 'staff'] 

Esto coincide con su ejemplo anterior más estrechamente. Sin embargo, este enfoque solo funciona si no hay otros caracteres que se hayan agregado o añadido a una palabra. Este es a menudo el caso al final de las cláusulas principales y subordinadas en las que se agrega una coma, un punto, un signo de exclamación o un signo de interrogación a la última palabra de la cláusula.

Por ejemplo, en la pregunta ¿Cuántas personas hay en su personal? el enfoque anterior no encontraría la palabra personal porque no hay un límite de palabra al final de la plantilla . En cambio, hay un signo de interrogación. Pero si omite la segunda \b al final de la expresión regular anterior, la expresión detectaría erróneamente las palabras en subcadenas, como total en total o totalidades .

La mejor manera de lograr lo que quiere es extraer primero todos los caracteres alfanuméricos en su oración y luego buscar en esta lista las palabras que necesita encontrar:

 In [51]: def find_all_words(words, sentence): ....: all_words = re.findall(r'\w+', sentence) ....: words_found = [] ....: for word in words: ....: if word in all_words: ....: words_found.append(word) ....: return words_found In [52]: print find_all_words(['total', 'staff'], 'The total number of staff in 30?') ['total', 'staff'] In [53]: print find_all_words(['total', 'staff'], 'My staff is totally overworked.') ['staff'] 
 question = "the total number of staff in 30?" find=["total","staff"] words=re.findall("\w+",question) result=[x for x in find if x in words] result ['total', 'staff'] 

¿Has pensado en usar algo más allá de Regex?

Considera esto y si funciona, expande desde esta solución.

 >>> 'total' in question.split() True 

similar

 >>> words = {'total','staff'} >>> [e for e in words if e in question.split()] ['total', 'staff']