154 votes

Expression régulière pour trouver des URL dans une chaîne de caractères

Quelqu'un connaît-il une expression régulière que je pourrais utiliser pour trouver des URL dans une chaîne de caractères ? J'ai trouvé beaucoup d'expressions régulières sur Google pour déterminer si une chaîne entière est une URL, mais j'ai besoin de pouvoir rechercher des URL dans une chaîne entière. Par exemple, j'aimerais pouvoir trouver www.google.com y http://yahoo.com dans la chaîne suivante :

Hello www.google.com World http://yahoo.com

Je ne recherche pas d'URL spécifiques dans la chaîne. Je recherche TOUTES les URL de la chaîne, c'est pourquoi j'ai besoin d'une expression régulière.

2voto

Muhammad Numan Points 71

Cette regex fonctionne parfaitement pour moi, elle devrait fonctionner pour vous aussi

(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?

1voto

avjaarsveld Points 559

Il s'agit d'une légère amélioration ou d'un ajustement de la réponse de Rajeev (en fonction de ce dont vous avez besoin) :

([\w\-_]+(?:(?:\.|\s*\[dot\]\s*[A-Z\-_]+)+))([A-Z\-\.,@?^=%&:/~\+#]*[A-Z\-\@?^=%&/~\+#]){2,6}?

Voir aquí pour un exemple de ce qu'il fait et ne fait pas.

Je me suis débarrassé de la vérification de "http" etc. car je voulais attraper les url sans cela. J'ai légèrement ajouté à l'expression rationnelle afin d'attraper certaines urls obscurcies (c'est-à-dire lorsque l'utilisateur utilise [dot] au lieu de "."). Enfin, j'ai remplacé " \w "avec "A-Z" et "{2,3}" pour réduire les faux positifs comme v2.0 et "moo.0dd".

Toute amélioration est la bienvenue.

0voto

Jahurul Islam Points 1

Que pensez-vous de celui-ci ?

(http:\/\/|ftp:\/\/|https:\/\/|www\.)([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?

Il correspond aux deux dans la question.

0voto

FMan Points 666

Cette version légèrement plus simple de la réponse de GooDeeJAY me convient bien (et prend en charge, par exemple, # et d'autres caractères au prix d'une augmentation des "faux positifs") :

import re
text = """The link of this question: https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string
Also there are some urls: www.google.com, facebook.com, http://test.com/method?param=wasd, http://test.com/method?param=wasd&params2=kjhdkjshd#changed
The code below catches all urls in text and returns urls in list."""

regex = r"(?i)(https?://|www.|\w+\.)[^\s]+"
urls = [match.group() for match in re.finditer(regex, text)]
print(urls)

et les sorties

[
'https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string', 
'www.google.com,', 
'facebook.com,', 
'http://test.com/method?param=wasd,', 
'http://test.com/method?param=wasd&params2=kjhdkjshd#changed'
]

0voto

Cette expression permet également de trouver des chemins comme : /chemin/texte.html

(https?\:\/[^\"\'\n\<\>\;\)\s]*)|(www?\.[^\"\'\n\<\>\;\s]*)|([^\s\&\=\;\,\<\<\>\"\'\(\)]+\/[\w\/])([^\"\'\n\;\s]*)|((?<!\<)[\/]+[\w]+[^\'\"\s\<\>]*)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X