2016-12-12 2 views
0

J'ai un problème similaire qui a été discuté dans ce lien Python extract sentence containing word, mais je ne veux pas de chaîne numérique pour terminer la phrase.Python extrayant la phrase contenant le mot excluant les chaînes numériques

par exemple:

The apt subtitle for the binoculars will be 9015.18.1190, CTS, which provides for binoculars. The rate of duty on this will be free. 

Quand j'ai essayé ceci:

import re 
txt="The apt subtitle for the binoculars will be 9015.18.1190, CTS, which provides for binoculars. The rate of duty on this will be free." 
define_words = 'apt subtitle' 
print (re.findall(r"([^.]*?%s[^.]*\.)" % define_words,txt)) 

sortie actuelle:

The apt subtitle for the binoculars will be 9015. 

Cependant la sortie attendue est:

The apt subtitle for the binoculars will be 9015.18.1190, CTS, which provides for binoculars. 

Quelqu'un peut-il m'aider à atteindre le rendement attendu?

+0

S'il y a juste une phrase ('txt'), vous devez manipuler, vous pouvez simplement utiliser' txt.split (« Le taux de droit applicable, ce sera gratuit. ») [0] '. Cependant, cela ne vous fournira pas de solution systématique au cas où il y aurait beaucoup de phrases à traiter. – Andersson

+0

Vous pouvez faire une division sur les phrases et ensuite trouver si le mot désiré existe dans la phrase et ensuite simplement imprimer cette phrase. –

Répondre

0

En utilisant lookahead regex pour affirmer correspondant se terminant par un . Thats pour ne pas suivre par numérique

Cela fonctionne pour votre entrée par exemple, pourrait cependant besoin de modifier un peu pour être plus générique pour traiter plus de cas.

import re 
txt="The apt subtitle for the binoculars will be 9015.18.1190, CTS, which provides for binoculars. The rate of duty on this will be free." 
define_words = 'apt subtitle' 
print (re.findall(r"([^.]*?%s.*?\.)(?!\d)" % define_words,txt)) 
# The apt subtitle for the binoculars will be 9015.18.1190, CTS, which provides for binoculars. 
+0

Hey vous avez raison .. Je viens d'apprendre que le problème n'est pas à cause des nombres .. Il y a des accolades et des guillemets dans la phrase .. Im capable de supprimer les accolades en utilisant 'txt = str (txt) .strip ('() ') 'mais je ne suis pas capable de supprimer les guillemets. Cependant ces doubles guillemets ne sont pas présents dans toutes les phrases. Comment puis-je les gérer? – AB6

+0

où est la double citation, pouvez-vous montrer l'exemple et la sortie attendue? vous pouvez utiliser 'txt = txt.strip ('()"') 'pour enlever le support rond et double citation – Skycc