2010-06-25 4 views
1

J'ai besoin d'aide pour la programmation python: J'ai besoin d'une commande qui peut rechercher tous les mots entre les balises d'un fichier texte. par exemple dans le fichier texte a <concept> food </concept>. J'ai besoin de rechercher tous les mots entre <concept> et </concept> et les afficher. quelqu'un peut-il vous aider s'il vous plaît .......python recherche à partir de l'étiquette

Répondre

3
  1. Chargez le fichier texte dans une chaîne.
  2. Rechercher la chaîne pour la première occurrence de <concept> utilisant pos1 = s.find('<concept>')
  3. Rechercher </concept> en utilisant pos2 = s.find('</concept>', pos1)

Les mots que vous recherchez sont alors s[pos1+len('<concept>'):pos2]

+1

Cette méthode ne prend pas des commentaires et des étiquettes avec des espaces en compte si l'auteur de la question implique XML – nkrkv

+0

+1 pour la simplicité – jensgram

1

Jetez un oeil à des expressions régulières. http://docs.python.org/library/re.html

Si vous voulez avoir par exemple la balise <i>, essayez

text = "text to search. <i>this</i> is the word and also <i>that</i> end" 
import re 
re.findall("<i>(.*?)</i>",text) 

Voici une brève explication comment findall fonctionne: Il regarde dans la chaîne donnée pour une expression régulière. L'expression régulière est <i>(.*?)</i>:

  • <i> indique que la balise d'ouverture <i>
  • (.*?) crée un groupe et correspond autant que possible jusqu'à ce qu'il vienne au premier
  • </i>, qui conclut la balise

Notez que la solution ci-dessus ne fonctionne pas quelque chose comme

<i> here's a line 
break </i> 

Puisque vous vouliez simplement extraire mots.

Cependant, il est bien sûr possible de le faire:

re.findall("<i>(.*?)</i>",text,re.DOTALL) 
3

Il y a une grande bibliothèque HTML/XML nommé BeautifulSoup traversant. Avec elle:

from BeautifulSoup import BeautifulStoneSoup 
soup = BeautifulStoneSoup(open('myfile.xml', 'rt').read()) 
for t in soup.findAll('concept'): 
    print t.string 
Questions connexes