2010-04-05 9 views
2

J'ai le fichier html. Je dois remplacer tout le texte entre ceci: [% anytext%]. Si je comprends bien, c'est très facile à faire avec BeautifulSoup pour analyser hmtl. Mais quelle est l'expression régulière et comment supprimer & écrire des données de texte?Analyse du fichier texte en python


Ok, voici le fichier exemple:

<html> 
    [t1] [t2] ... [tood] ... [sadsada] 
    Sample text [i8] 
    [d9] 
</html> 

script Python doit travailler avec toutes les chaînes et remplacer [%] -> une autre chaîne, par exemple:

<html> 
    * * ... * ... * 
    Sample text * 
    * 
</html> 

Ce que je l'ai fait:

import re 
import codecs 

fullData = '' 
for line in codecs.open(u'test.txt', encoding='utf-8'): 
    line = re.sub("\[.*?\]", '*', line) 
    fullData += line 

print fullData 

Ce code fait exactement ce que j'ai décrit dans l'échantillon. Merci a tous.

+0

Il serait plus facile si vous nous montriez un exemple avec une entrée et une sortie attendue, du code Python simple que vous avez essayé. –

Répondre

2

Regex fait le tour si vous besoin de remplacer le texte entre « [% » et « % ] ".

Le code ressemblerait à quelque chose comme ceci:

import re 


newstring = re.sub("\[%.*?%\]",newtext,oldstring) 

Le regex utilisé ici est paresseux il serait tout correspondre entre une occurrence de « [% » et la prochaine occurrence de « %] ». Vous pourriez le rendre gourmand en supprimant le point d'interrogation. Cela correspondrait à tout entre la première occurrence de "[%" et la dernière occurrence de "%]"

2

On dirait que vous devez analyser un fichier texte générique, en cherchant ce marqueur pour le remplacer - le fait que l'autre texte en dehors du marqueur est HTML, au moins de la façon dont vous avez formulé votre tâche, n'a pas d'importance.

Si oui, et ce que vous voulez est de remplacer toutes les occurrences de [%anytext%] avec loremipsum, puis un simple:

thenew = theold.replace('[%anytext%]', 'loremipsum') 

servira, si theold est la chaîne d'origine contenant le texte du fichier - maintenant thenew est une nouvelle chaîne avec toutes les occurrences de ce marqueur remplacées - pas besoin de regex, BS ou autre chose.

Si votre tâche est très différente de cela, pls modifier votre question pour expliquer plus en détail -)

+0

la tâche est venue d'une réponse précédente: http://stackoverflow.com/questions/2580343/removing-template-string-from-html-file-with-javascript – msw

+0

Oui, JavaScript n'est pas compatible avec un autre besoin, nous avons donc choisi python pour ça. – Ockonal

+0

Mise à jour post avec un exemple. – Ockonal