Python : Expression régulière

Nouga -  
 Utilisateur anonyme -
Bonjour,

J'ai besoin d'aide pour trouver une expression régulière, j'ai plusieurs liens coller sans distinction particulière entre eux et je souhaite trouver une expression pour les récupérer, mon problème est le suivant.

Ma chaine ressemble a ça :

http://www.google.frhttp://fr.weather.comhttp://www.meteoconsult.com

Je ne trouve pas le moyen d'éviter d'inclure une chaine entière, je souhaiterais trouver quelque chose qui ce rapproche de [^http] mais pour une chaine entière, car cette manière ne prends que les lettres individuellement. J'ai regarder la documentation de python bien entendu mais je dois avouer que je suis un peu perdu.

Merci de m'aider.

8 réponses

Utilisateur anonyme
 
Les réponses données ici sont correctes. Je t'en donne une autre qui t'enverras sous forme de liste les urls

ch="http://www.google.frhttp://fr.weather.comhttp://www.meteoconsult.com"
new_ch=ch.replace("http://", " ").split()
# resultat : ['www.google.fr', 'fr.weather.com', 'www.meteoconsult.com']

for url in new_ch:
	print "http://"+url # pour avoir les urls sous la forme http://...

# resultat : 
#https://www.google.fr/?gws_rd=ssl
#https://weather.com/fr-FR/temps/aujour/l/FRXX0076:1:FR
#http://www.meteoconsult.com</code>


Que demander de plus? Le faire avec le module re, c'est comme écraser une fourmi avec un marteau piqueur
2
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pourquoi utiliser la fonction replace ?
Le même programme avec : new_ch=ch.split("http://") fait exactement pareil.
0
Utilisateur anonyme
 
eh bien je dirais pourquoi pas? Ta solution, je l'ai dis plus tôt est correcte aussi, je ne propose qu'une solution différente ayant le même résultat ;)

Par contre, il me semble qu'avec la méthode split tu te retrouves dans ta liste de résultats avec un "http://" seul, c'est tout.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Je disais juste ça car c'est dommage d'utiliser une fonction de plus ^^.
Par contre comme tu l'as fait remarquer si justement, j'avais oublié le fait que chaine.split("[http://]") laissera un élément vide en début de liste. Il faut donc utiliser : new_ch=ch.split("[http://]")[1:]
Cdlt,
0
Utilisateur anonyme
 
Tu utilises le slice ( [:1] ) qui est aussi une fonction supplémentaire ;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Vi vi, c'est pareil. J'avais oublié le coup de l'élément vide comme dit plus haut :-))).
Par contre je savais pas que le slicing était considéré comme une fonction. Je pensais que [1:] permettait d'accéder directement à partir de l'élément 1 via un pointeur en C.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Pas besoin de passer par une regexp, tu peux tout simplement utiliser la méthode slip.
Par exemple : chaine.split("http://") te renverra dans un tableau www.google.fr, fr.weather.com, www.meteoconsult.com
Et si tu veux, tu peux remettre facilement le http:// devant si ça t'es important.

Cdlt,
0
Nouga
 
Merci pour ta réponse,

Effectivement ça serai une solution mais il ce trouve que je dois utiliser une expression régulière pour ce cas, si quelqu'un pouvait m'aider dans ce sens, ça dois surement être possible mais je n'arrive pas a trouver par moi même.
0
Utilisateur anonyme
 
Sans espaces entre tes urls c'est pas évident. La solution proposée précédemment est bonne et de toute façon bien plus rapide que les expressions régulières.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
tu sais que ton adresse est comprise entre deux "http://" donc, un truc dans le genre :
find(" http://[:alpnum:|.|/]*http://|$ " )
c'est à dire tout caractère alphanumérique plus les caractères accepter dans les URL ('/', '.', '_', '-' ...) compris entre "http://" et : "http://" ou une fin de ligne.
0
Nouga
 
Je relance mon sujet en désespoir de cause, je n'ai toujours pas trouver de solution correcte.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
en quoi ma solution ne conviens pas ?
0
Nouga
 
@Char Snipeur:
en quoi ma solution ne conviens pas ?
Merci d'essayer de m'aider avant tout, le tiens quand même a le dire et surtout ne t'offusque pas. C'est juste que tu me propose une idée que je décris dans mon premier poste, c'est à dire prendre la chaine entre "http" et "http" en me proposant un exemple qui n'est la que pour représenté ton idée donc qui ne fonctionnement pas, du coup il faut admettre que ça ne m'aide que moyennement.

@fred1599:
Merci, je pense que je vais utilisé ta proposition vu que je ne trouve pas pour l'expression régulière, au passage peux tu m'expliquer, si ce n'est pas trop abusé de ton temps, pourquoi tu me déconseilles d'utilisé le module re, c'est un module particulièrement lourd ?
0
Utilisateur anonyme
 
Sur du texte complexe, le module re est très efficace, mais sur du gros fichier il est particulièrement long, et si on peut l'éviter, les autres solutions seront toujours plus rapides.
0