2010-11-06 6 views
0

J'ai un fichier txt qui contient de certains url:url transformation de, python

[http://igu.org.ru/ International Geographical Union - Russian National Committee] 
[http://www.geografos.org Colegio de Geógrafos - España] 
[http://www.geografs.org Col.legi de Geògrafs - Catalunya] 
[http://www.geografs.org] 

maintenant, je veux transformer ce liens externes de la façon suivante (dans l'ordre fixe):

remplacer "[url any text] "avec" any text ", où" url "est une URL (par exemple, commence par" http: // ").

remplacer "[url]" avec "url"

import re 
def openfile(filename): 
    with codecs.open(filename, encoding="utf-8") as F: 
     replace = F.read() 
     replace = re.sub(r'\[http://.+ ...) # should replace "[url any text]" with "any text" 
     replace = re.sub(...) # should replace "[url]" with "url" 

des suggestions?

Répondre

2
re1 = re.compile(r'\[(http[^\s]*)\s(.*)\]') 
re2 = re.compile(r'\[(http[^\s]*)\]') 
with codecs.open(filename, encoding='utf-8') as F: 
    text = F.read() 
    pre_filter = re1.sub('\g<2>', text) 
    result = re2.sub('\g<1>', pre_filter) 

pour traiter votre texte. Pour plus d'informations en arrière-plan, vous pouvez lire: http://docs.python.org/howto/regex.html#search-and-replace

+0

comment expliquez-vous \ g <2> et \ g <1>? Et comment l'utiliser dans la fonction re.sub() au niveau du module? – Gusto

+0

Dans la première regex, vous voyez que le premier groupe est dans le hook '()', c'est le '(http [^ \ s] *)' et le second groupe est le texte '(. *)', Donc ce que l'instruction re.sub fait est de remplacer le texte entier ou chaque élément correspondant par le second groupe. – tuantub

+0

utiliser pre_filter = re.sub (r '\ [(http [^ \ s] *) \ s (. *) \]', '\ G <2>', texte) et résultat = re.sub (r '\ [(http [^ \ s] *) \] ',' \ g <1> ', pre_filter) au lieu de re1 et re2 si vous voulez :) – tuantub